考虑一个例子
public Object myMethod()
{
//some condition
return obj of type Object1;
//else
return obj of type Object2;
}
我将其称为如下,
Object obj = myMethod();
obj = (obj instanceof Object1)? (Object1)obj : (Object2) obj;
我的问题是甚至在类型转换后,obj既不是Object1类型也不是Object2类型。解决这个问题的最佳方法是什么?
答案 0 :(得分:3)
如果没有分配你要投射的类型的变量,那么投射是没有意义的,所以你需要两个变量。
Object obj = myMethod();
Object1 obj1 = null;
Object2 obj2 = null;
if (obj instanceof Object1) {
obj1 = (Object1) obj;
// some specific Object1 handling
} else if (obj instanceof Object2) {
obj2 = (Object2) obj;
// some specific Object2 handling
}
答案 1 :(得分:1)
您正在投射的对象已经是正确的类型。在致电myMethod
之后,您的演员阵容毫无用处。
您需要将强制转换对象分配给相同类型的引用才能使用它。
Object obj = myMethod();
if( obj instanceof Object1 ){
doSomething((Object1) obj);
} else {
doSomething((Object2) obj);
}
然后,您可以在重载的doSometing
方法中使用正确的界面。