alleinstehende geschweifte Klammern

Ratzer

Mitglied
Hallo!
Ich habe sowas noch nie gesehen. Was beudeten geschweifte Klammern, wenn sie nicht an irgendeinen Rumpf gekoppelt sind, also sowas:
Java:
class X {
	{
		f();
		g();
	}

	private void f() {
	}

	private void g() {
	}
}
Wenn man sie weglässt, gibt es natürlich einen Compiler-Fehler. Aber warum funktioniert das? Ist das irgendwie eine verkürzte Schreibweise für irgendwas?
 
Manche Menschen (ich nicht) nutzen das z.B. zur Initialisierung von Collections:

Java:
public class Foo {
  private List<String> list = new ArrayList(){{ add("one"}; add("two"); add("three"); }};
}

Ich denke, das muss nicht sein. Insbesondere ist [c]list[/c] hier keine [c]ArrayList[/c], sondern eine anonyme Unterklasse von [c]ArrayList[/c].

Eine Alternative für obige Lösung ist:
Java:
import static java.util.Array.asList;
public class Foo {
  private List<String> list = new ArrayList(asList("one", "two", "three"));
}

Für [c]Map[/c]s gibt es allerdings keine so nette Variante.
 
Zuletzt bearbeitet:
Manche Menschen (ich nicht) nutzen das z.B. zur Initialisierung von Collections:

Ich finde es nicht gut, dass diese Unsitte grundlos thematisiert wird - gerade im Anfängerforum. Bei anderen Themen zählen wir ja auch nicht gleich alle möglichen Anti-Pattern auf, die mit einer bestimmten Technik möglich sind. Es ist hier zwar negativ bewertet, aber schlechte Werbung ist manchmal auch Werbung.
 
Andere "einleuchtende" Anwendungen sind mir halt nicht eingefallen. Und was spricht dagegen, Antipattern kennenzulernen?
 
Doch z.B. für Unittests von ServletFiltern oder ähnlichem. Ich habe innerhalb des Unittests eine anonyme Subclass des Filters erzeugt und darin die Konfiguration gesetzt, welche normal automatisch durch die ServletConfig gemacht wird.
 

Zurück
Oben