127 Stimmen

Ist es möglich, anonyme innere Klassen in Java statisch zu machen?

In Java können verschachtelte Klassen entweder static oder nicht. Wenn sie es sind static enthalten sie keinen Verweis auf den Zeiger der enthaltenden Instanz (sie werden auch nicht mehr als innere Klassen bezeichnet, sondern als verschachtelte Klassen).

Vergessen, eine verschachtelte Klasse zu erstellen static wenn es diesen Verweis nicht benötigt, kann zu Problemen mit der Garbage Collection oder der Escape-Analyse führen.

Ist es möglich, eine anonyme innere Klasse zu erstellen static auch? Oder findet der Compiler dies automatisch heraus (was er könnte, da es keine Unterklassen geben kann)?

Wenn ich zum Beispiel einen anonymen Komparator erstelle, brauche ich den Verweis nach außen fast nie:

  Collections.sort(list, new Comparator<String>(){
       int compare(String a, String b){
          return a.toUpperCase().compareTo(b.toUpperCase());
       }
  }

-3voto

Terra Caines Punkte 2985

Eine anonyme innere Klasse kann statisch gemacht werden, indem man sie innerhalb einer statischen Methode aufruft.

Dadurch wird der Verweis nicht wirklich entfernt. Sie können dies testen, indem Sie versuchen, die anonyme Klasse zu serialisieren und die umschließende Klasse nicht serialisierbar zu machen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X