Frage

Warum werden aus Neugier manchmal mehrere Java -Klassendateien für eine Klasse nach der Zusammenstellung generiert? Zum Beispiel hat meine Anwendung sechs Klassen. Für eine Klasse wurden insgesamt 10. Class -Dateien generiert, angefangen von MyClass#1 bis hin zu MyClass#10.

War es hilfreich?

Lösung

Diese sind für innere Klassen und Statische verschachtelte Klassen. Diejenigen mit Zahlen sind anonyme innere Klassen.

Zum Beispiel:


class Foo {
   class Bar { }
   static class Baz { }
   void run() {
      Helper t = new Helper() {
         int helpMethod() {
            return 2;
         }
      };
    }
}

Dadurch werden Klassendateien erstellt Foo.class, Foo$Bar.class, Foo$Baz.class und Foo$1.class (Für die Umsetzung der Helper Schnittstelle)

Andere Tipps

Sie erhalten mehr. Class -Fils aus einer einzelnen Quelldatei, wenn

  • Die Klasse enthält innere Klassen oder statische innere Klassen. Innenklassen können nisten. Ihre Namen sind <outer class name>$<inner class name>.

  • Innere Schnittstellen, die immer statisch sind.

  • Anonyme innere Klassen (die tatsächlich einfache innere Klassen ohne Namen sind)

  • Verpacken Sie Zugriffsoberflächen und Klassen vor und nach Ihrer Hauptklasse. Sie können eine beliebige Anzahl von Paketzugriffsklassen und Schnittstellen in einer einzelnen Java -Quelldatei haben. Normalerweise werden kleine Helferobjekte, die nur von der Klasse verwendet werden, nur in dieselbe Datei eingesetzt.

Eine Java -Quelldatei kann mehrere Klassendateien generieren, wenn Ihre Klasse innere Klassen enthält. Anonyme innere Klassen werden durch Ihre nummerierten Klassendateien dargestellt.

Jede Klasse in Java gehört zu einer .java-Datei, aber ein .java-File kann mehrere Klassen enthalten. Dazu gehören innere und anonyme Klassen. Die für inneren Klassen generierten .class-Files enthalten einen '$' in ihrem Namen. Anonyme innere Klassen erhalten Zahlen.

Um die oben genannten Antworten hinzuzufügen, ist dies ein weiteres gutes Beispiel für generierte innere Klassen, die auf den Vergleichen basieren (Jeder Komparator wird in einem anderen Zusammenhang zusammengestellt Myclass $ X.CLASS):

public class MyClass {
    ...

    public void doSomething() {
        ...
        Collections.sort(list, new Comparator<MyObj>() {
            public int compare(MyObj o1, MyObj o2) {
                ...
            }
        });
        ...
    }

    ...
}

Wenn es eine x.java -Datei gibt und wenn sie 4 collections.sort () {} enthält, dann nach der Kompilierung x.class, x $ 1.CLASS, x $ 2.CLASS, x $ 3.CLASS, x $ 4.CLASS wird generiert.

Im Falle einer inneren Klasse und der statischen inneren Klasse werden mehr. Class -Dateien generiert.

Mehr als eine Klasse wird bei der Zusammenstellung generiert, nur wenn Ihre Klasse eine innere Klasse hat.

verweisen:Warum generiert Java -Code mit einer inneren Klasse eine dritte SOMECLASS $ 1. Class -Datei?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top