java - Java 中关于 if 语句的类型转换

标签 java casting

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

private SuperType currObj;

public void someMethod(SuperType currObj){

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

最佳答案

currObj = (aSubType) currObj 并没有真正产生任何实际效果。为了调用 someMethodofaSubtype(),编译器需要知道该对象确实是 aSubType 类型。强制转换并没有真正改变底层对象。进行转换,然后将转换结果存储为 aSubType 类型的新变量就可以解决问题。您可能想要类似的东西:

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

关于java - Java 中关于 if 语句的类型转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5526992/

相关文章:

c# - 何时使用运行时类型信息?

c++:也将派生类的重载函数作为参数调用(无需显式强制转换)

c - 为什么这个转换为 void 指针有效?

c++ - 安全地将(shared_ptr 的 vector 到对象)转换为(shared_ptr 的 vector 到常量对象)

c - 为什么 TaskSpawn 采用整数而不是 void*?

java - 如何在 Java 中获取声音文件的总时间?

java - 在 jlist 中显示集合

java - 组合框单元格编辑器的背景颜色

java - 如何在 jetty 服务器中为 CSS、Javascript、图像等静态资源设置过期 header

Java Swing 不工作