Listen:
1 |
List<String> emptyList = new ArrayList<>(); |
Sie können “einzeilig” initialisiert werden:
1 2 3 4 5 6 7 8 9 10 |
ArrayList<String> nichtWirklichEinzeilig = new ArrayList<String>() {{ add("A"); add("B"); add("C"); }}; List<String> immutableList1 = Arrays.asList("A", "B", "C"); List<String> immutableList2 = Collections.singletonList("A"); ArrayList<String> mutableList = new ArrayList<>(Arrays.asList("A", "B", "C")); |
Aber: Was, wenn ich sie mit anonymen Klassen initialisieren will?
1 2 3 4 5 6 7 |
// DOESN'T WORK! List<Foo> doesntWork = Arrays.asList(new Foo() { @Override public String bar() { return "Hello moto"; } }); |
Geht nicht, weil die anonyme Klasse Foo beerbt, und damit kommt Java nicht klar. Aber
1 2 3 4 5 6 |
List<Foo> fooList = Arrays.asList(new Foo[]{new Foo() { @Override public String bar() { return "Hello moto"; } }}); |
geht. Hässlich, aber es geht. 🙂 Ein bisschen schöner (weil lesbarer) geht es mit Guava, aber im Grunde ist das genauso umständlich:
1 2 3 4 5 6 |
List<Foo> fooList = FluentIterable.of(new Foo[]{}).append(new Foo() { @Override public String bar() { return "Hello moto"; } }).toList(); |
Weitere Vorschläge?