¿Hay alguna circunstancia en la que Class.getDeclaringClass
podría dar un resultado diferente de Class.getEnclosingClass
?Clase de inclusión vs Clase declarante
pensé que puede ser que ver con una subclase de la clase externa crear instancias de una clase interna que no fue declarado como estático, pero no fue capaz de obtener una diferencia de esa manera:
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());
}
}
salida :
class Main
class Main
class Main
class Main
class Main
class Main
¿cuál es su propósito ? – MartinL
@MartinL: Tengo una clase 'X' que declara' MemberInnerClass', en la terminología de mi ejemplo. También tengo una gran cantidad de subclases de 'X'. Tenía una posible necesidad de determinar qué subclase de' X' estuvo involucrado en una instancia determinada de 'MemberInnerClass'; he trabajado ed alrededor de esto ahora, pero tenía curiosidad por declarar vs clase adjunta. – OpenSauce