+-
java – 尝试进行类型转换但遇到CAP#1错误
为即将开始的项目进行类型转换,我意外地发现了这个错误:

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.我已经有一段时间了,因为我沉浸在Python 2.7中,因此我接触了Java(1.7之前).

编辑:

Louis Wasserman的回答也提出了同样的错误.

最佳答案
第一个问题是您尝试使用Class的实例作为类型转换.那是无效的 – 它必须是一种类型.

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

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

它不会起作用.

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

如果您使用:

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

它会起作用;你正在使用特定的课程.如果您有以下情况,情况也是如此:

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

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

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

点击查看更多相关文章

转载注明原文:java – 尝试进行类型转换但遇到CAP#1错误 - 乐贴网