这里我有点好奇:
if (!(Outer instanceof Outer.Nested))
{
System.out.println("IT IS NOT THE SAME!!");
}
为什么编译器不理解Outer.Nested
不扩展Outer
也不能成为它的实例,因此返回编译错误?
请注意,如果反过来:Outer.Nested instanceof Outer
它将不起作用。
这里我有点好奇:
if (!(Outer instanceof Outer.Nested))
{
System.out.println("IT IS NOT THE SAME!!");
}
为什么编译器不理解Outer.Nested
不扩展Outer
也不能成为它的实例,因此返回编译错误?
请注意,如果反过来:Outer.Nested instanceof Outer
它将不起作用。
RelationalExpression:
....
RelationalExpression instanceof ReferenceType
instanceof运算符的RelationalExpression操作数的类型必须是引用类型或者null类型;否则,会发生编译时错误。
换句话说,instanceof 的左侧必须是对某个对象或的引用null
。Outer
看起来像一个类名,这两者都不是。
您可能正在寻找Class.isAssignableFrom(),它告诉您一个类是否是另一个类的超类。
首先,该语句无法编译,如果Outer
是类类型:
if (!(Outer instanceof Outer.Nested)) // Outer is not an expression: Expression expected
如果问题中没有准确的上下文,我想你会处理这样的场景:
public class Outer {
private class Inner {
}
public static void main(String[] args) {
Test t = new Test();
Inner i = t.new Inner();
System.out.println(i instanceof Test); //inconvertible types => normal
System.out.println(t instanceof Inner); // inconvertible types => normal
}
}
一切都是这样正常发生的。
如果您的情况相似:听起来像是您的编译器进程的问题。
如果您的情况不相似:请使用更多信息更新您的问题。