以下代码抛出编译时异常
类型不匹配:无法从Integer转换为K.
我理解的是K应该处理任何扩展的价值Number.
public <K extends Number> K getValue(){
Integer a = new Integer(1);
return a;//Type mismatch: cannot convert from Integer to K
}
Run Code Online (Sandbox Code Playgroud)
(注意:这只是一个测试代码,可以提出我的问题,而不会给出我实际情况的不相关细节.)
这里的问题是这K是一个扩展的类型,Number但它是一个未知的子类,Number这就是编译器引发此错误的原因,因为Integer它只是一个特定的子类,Number所以它不能与任何潜在的目标类型匹配.
假设您想明确地将其强制转换为使用它进行编译
public <K extends Number> K getValue(){
Integer a = new Integer(1);
return (K) a;
}
Run Code Online (Sandbox Code Playgroud)
然后,如果你调用它期望任何子类,Number除了Integer你会得到一个ClassCastException,这正是编译器想要避免的:
Double d = getValue(); <-- throws ClassCastException
Run Code Online (Sandbox Code Playgroud)
作为解决方法,您可以使用Number下一个返回类型定义您的方法:
public Number getValue() {
return new Integer(1);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2035 次 |
| 最近记录: |