【发布时间】:2013-07-04 10:40:55
【问题描述】:
如果我有一个内部类,例如
class Outer{
class Inner{}
}
有没有办法检查任意Object 是否是任意Inner 的实例,而不管其外部对象如何?当对象不是来自同一个Outer 的Inners 时,instanceof 给出 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返回假的例子吗? -
@cambecc,
o instanceof Outer.Inner当o是任何Outer的Inner的实例而不是您从中调用它的那个时,给出错误。 -
不知道你所说的“任何
Outer不是你打电话的那个人”是什么意思。一个快速的代码示例对于回答您的问题非常有用。你不是说Outer.Inner和OtherOuter.Inner应该是相同的Inner,对吗? -
@cambecc,包括示例。
-
感谢您的示例。刚刚尝试运行它;结果是
true。你确定你看到false?false的结果将违反 JLS §15.20.2,其中说:“在运行时,如果 RelationalExpression 的值不为 null 并且引用可以强制转换为ReferenceType 而不引发 ClassCastException。" 我们知道outer2.inner可以转换为Inner,因为那是它的类型。尝试将isInner的参数更改为类型Inner,您将看到不需要显式转换并且不会发生编译错误。不知道为什么你会看到false。
标签: java inner-classes instanceof