class Outer{
class Inner{}
}
有没有办法检查任意Object
是否是任何Inner
的实例,而不考虑其外部对象?instanceof
在对象不是来自同一Outer
的Inner
时会返回false。我知道一个解决方法就是将Inner
定义为静态类,但我想知道我所问的是否可能。
示例:
class Outer{
Inner inner = new Inner();
class Inner{}
public boolean isInner(Object o){
return o instanceof Inner;
}
}
Outer outer1 = new Outer();
Outer outer2 = new Outer();
boolean answer = outer1.isInner(outer2.inner); //gives false
instanceof Inner
返回false的例子吗? - cambecco
是除了你正在调用的那个Outer
之外的任何Outer
的Inner
的实例时,o instanceof Outer.Inner
会返回false。 - NavigateurOuter.Inner
和OtherOuter.Inner
应该是相同的Inner
,是吗? - cambeccouter2.inner
可以被转换为Inner
,因为这是它的类型。尝试更改isInner
的参数类型为Inner
,您会发现无需进行显式转换并且不会出现编译错误。我不确定您为什么看到false
。 - cambeccRunnable
)的长期实例,但我希望确保他们不会通过传递匿名/内部类来意外地阻止周围实例被GC回收。长期存在的匿名类可能是内存泄漏的微妙来源,而这个检查可以帮助防止它们。 - dimo414