Nav*_*eur 17 java instanceof inner-classes
如果我有一个内部阶级,例如
class Outer{
class Inner{}
}
Run Code Online (Sandbox Code Playgroud)
有没有办法检查任意Object是否是任何实例Inner,无论其外部对象是什么?instanceof当对象不是Inner相同的时候给出错误Outer.我知道一个解决方法只是制作Inner一个静态类,但我想知道我问的是否可行.
例:
class Outer{
Inner inner = new Inner();
class Inner{}
public boolean isInner(Object o){
return o instanceof Inner;
}
}
Run Code Online (Sandbox Code Playgroud)
Outer outer1 = new Outer();
Outer outer2 = new Outer();
boolean answer = outer1.isInner(outer2.inner); //gives false
Run Code Online (Sandbox Code Playgroud)
Lau*_*ntG 18
那怎么样?
public static boolean isInnerClass(Class<?> clazz) {
return clazz.isMemberClass() && !Modifier.isStatic(clazz.getModifiers());
}
Run Code Online (Sandbox Code Playgroud)
该方法isMemberClass()将测试该方法是否为成员(而不是匿名或本地类),第二个条件将验证您的成员类是否不是静态的.
顺便说一句,文档解释了本地,匿名和嵌套类之间的差异.
嵌套类分为两类:静态和非静态.声明为static的嵌套类简称为静态嵌套类.非静态嵌套类称为内部类.
你总是可以:
getClass().getName()
Run Code Online (Sandbox Code Playgroud)
并进行字符串比较。
编辑:为了考虑继承(在内部类之间?谁会这样做?!),您可以随时循环getSuperclass()并检查它们,甚至可以跟踪实现的接口。