在Java中键入关于if语句的Casting

时间:2011-04-03 01:33:07

标签: java casting

为什么这段代码不起作用?具体来说,为什么在if语句之外完成的类型转换不在其中。

private SuperType currObj;

public void someMethod(SuperType currObj){

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

2 个答案:

答案 0 :(得分:4)

currObj = (aSubType) currObj实际上没有任何净效应。为了调用someMethodofaSubtype(),编译器想要知道该对象确实是aSubType类型。演员表并没有真正改变底层对象。转换然后将转换结果存储为aSubType类型的新变量就可以了。你可能想要这样的东西:

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

答案 1 :(得分:0)

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

你想:

aSubType subObject = (aSubType)currObj;