0

我有一堆对象,在这个堆栈中我推送 ClassA 和 ClassB 对象。我有一个必须从这个堆栈返回对象的方法

public Object method(Stack s){
    ClassA a = new ClassA();
    stack.push(a);
    ClassB b = new ClassB();
    stack.push(b);
    while(stack has two elements) stack.pop();
    return stack.pop()// I return the last element
}

问题是:当我调用这个方法 instanceof 不起作用时,它不能再告诉 ClassA 和 ClassB

Object o = method(s);
if ( o instanceof ClassA){
    //do something
} else if (o instanceof ClassB) {
    //do something else
}

内部方法(Stack s) instanceof 有效,外部无效,但 toString() 方法工作正常,它为每个类返回正确的字符串。

4

1 回答 1

4

在某些情况下,您的自省代码可能无法按预期工作:

  • 如果onull,则instanceof运算符返回false。根据 JLS,该null值不是任何类型的实例。

  • 如果ClassB是 的子类型classAo instanceof ClassA则将返回true的实例ClassB

  • 如果您使用类加载器做一些复杂的事情,可以使用不同的类加载器加载相同的“.class”文件。如果这样做,您将遇到类的两个“副本”实际上具有不同类型的问题......并且instanceof会返回false. (此行为也在 JLS 中指定。)

最后一种情况可能特别令人困惑,因为当您查看两个类的名称时,它们将是相同的。但是class1.equals(class2)orclass1 == class2会给你关于两个类是否实际上相同的明确答案。

于 2012-10-27T13:38:17.607 回答