+-

为即将开始的项目进行类型转换,我意外地发现了这个错误:
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错误 - 乐贴网