2011-04-03 59 views
0

为什么此代码不起作用?具体来说,为什么在if语句之外完成的类型转换不在其中。关于if语句在Java中进行类型转换

private SuperType currObj; 

public void someMethod(SuperType currObj){ 

    if(currObj instanceof aSubType){ 
     currObj = (aSubType) currObj; 
     if (true){ 
      currObj.someMethodofaSubtype(); 
     } 
    } 
} 
+0

你还必须有变量名可以是混乱的一些混合。你可以帮助指定哪个是通过'this'关键字。 – jbrookover 2011-04-03 01:38:26

回答

4

该行currObj = (aSubType) currObj实际上没有任何净效应。为了调用someMethodofaSubtype(),编译器想知道该对象确实是aSubType类型。演员阵容并没有真正改变基础对象。投射然后将投射结果存储为类型为aSubType的新变量将会有所斩获。您可能想要类似于:

aSubType subCurrObj = (aSubType) currObj; 
subCurrObj.someMethodofaSubtype(); 
+0

感谢您的快速反应,这是有道理的! – Jesse 2011-04-03 01:55:45

0

为了使类型转换生效,您需要将引用存储在正确类型的变量中。您已经从SuperType转换为aSubType,但是您将结果存储在SuperType变量中,该变量会自动重新备份。

你想:

aSubType subObject = (aSubType)currObj;