gpt4 book ai didi

java - 尝试进行类型转换但出现 CAP#1 错误

转载 作者:搜寻专家 更新时间:2023-11-01 02:09:18 25 4
gpt4 key购买 nike

在为我即将开始的项目进行类型转换时,我意外地发现了这个错误:

incompatible types: Class<CAP#1> cannot be converted to myObj
where CAP#1 is a fresh type-variable:
CAP#1 extends ImyObj from capture of ? extends ImyObj

导致这个错误的代码:

ImyObj testObj = new myObj();
System.out.println(testObj.sayHi());
myObj testObj2 = (testObj.getClass()) testObj;
System.out.println(testObj2.sayBye());

但是这很好用:

ImyObj testObj = new myObj();
System.out.println(testObj.sayHi());
myObj testObj2 = (myObj) testObj;
System.out.println(testObj2.sayBye());

他们不应该做同样的事情还是我错过了什么?我目前安装了 Java 1.7_51。接触 Java(1.7 之前)已经有一段时间了,因为我沉浸在 Python 2.7 中。

编辑:

Louis Wasserman 的回答也引发了同样的错误。

最佳答案

第一个问题是您正在尝试使用 Class实例作为类型类型转换。那是无效的 - 它必须是一种类型。

除此之外,如果您尝试这样做(为了清楚/正确命名,我已将 myObj 重命名为 MyObj):

ImyObj testObj = new MyObj();
MyObj testObj2 testObj.getClass().cast(testObj);

这是行不通的。

testObj.getClass()将返回一个 Class<? extends ImyObj>这是“扩展 ImyObject 的东西”。它不能用于转换到特定的子类;这就是错误所说的。

如果您使用过:

MyObj testObj2 = MyObj.class.cast(testObj);

它会起作用;您正在使用特定的类(class)。如果您有:

MyObj mo = new MyObj();
MyObj testObj2 mo.getClass().cast(testObj);

在这种情况下 mo.getClass()返回 Class<? extends MyObj> 可以用于转换为 MyObj因为目标是 MyObj而不是 MyObj 的某个子类

如果testObj 不是 MyObj 的实例它会抛出 java.lang.ClassCastException

关于java - 尝试进行类型转换但出现 CAP#1 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21569868/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com