以下代码抛出编译时异常
类型不匹配:无法从整数转换为K
我理解-1
应该处理任何扩展0
的值。
K
(注意:这只是一个测试代码,可以提出我的问题,而不会提供我实际情况的无关细节。)
答案 0 :(得分:5)
这里的问题是K
是一种扩展Number
的类型,但它是未知的Number
子类,这就是编译器的原因引发此错误的原因是Integer
只是Number
的一个特定子类,因此无法与任何潜在的目标类型匹配。
让我们说明确要强制转换它以使用
进行编译public <K extends Number> K getValue(){
Integer a = new Integer(1);
return (K) a;
}
然后,如果你打电话给它,期望Number
除Integer
以外的任何子类,你将获得ClassCastException
,这正是编译器想要避免的:
Double d = getValue(); <-- throws ClassCastException
作为解决方法,您可以使用Number
作为返回类型定义您的方法,如下所示:
public Number getValue() {
return new Integer(1);
}