Umschließenden Klasse vs Klasse Deklarieren

Gibt es irgendwelche Umstände, unter denen Class.getDeclaringClass geben könnte, ein anderes Ergebnis aus Class.getEnclosingClass?

Ich dachte, es vielleicht zu tun mit einer Subklasse der äußeren Klasse instanziieren eine innere Klasse, die war nicht als statisch deklariert, aber ich war nicht in der Lage, einen Unterschied so:

public class Main {
  private static class StaticInnerClass {

  }

  private class MemberInnerClass {

  }

  private static class ChildClass extends Main {

  }

  public MemberInnerClass getMemberInnerClassInstance() {
    return new MemberInnerClass();
  }

  public static void main(String[] args) {
    System.out.println( StaticInnerClass.class.getDeclaringClass() );
    System.out.println( StaticInnerClass.class.getEnclosingClass() );
    System.out.println( MemberInnerClass.class.getDeclaringClass() );
    System.out.println( MemberInnerClass.class.getEnclosingClass() );
    System.out.println( new ChildClass().getMemberInnerClassInstance().getClass().getEnclosingClass() );
    System.out.println( new ChildClass().getMemberInnerClassInstance().getClass().getDeclaringClass() );
  }
}

Ausgabe:

class Main
class Main
class Main
class Main
class Main
class Main
  • was ist Ihr Ziel?
  • Ich habe eine Klasse X was erklärt ein MemberInnerClass, in der Terminologie von meinem Beispiel. Ich habe auch eine große Anzahl von Unterklassen von X. Ich hatte einen möglichen Bedarf, um festzustellen, welche Unterklasse der X beteiligt war, für eine gegebene Instanz von MemberInnerClass; ich habe gearbeitet, um dieses nun aber neugierig war deklarieren vs umschließenden Klasse.
InformationsquelleAutor OpenSauce | 2012-02-20
Schreibe einen Kommentar