Java泛型:类型不匹配:无法从Integer转换为K.

时间:2016-11-25 17:17:42

标签: java generics

以下代码抛出编译时异常

  

类型不匹配:无法从整数转换为K

我理解-1应该处理任何扩展0的值。

K

(注意:这只是一个测试代码,可以提出我的问题,而不会提供我实际情况的无关细节。)

1 个答案:

答案 0 :(得分:5)

这里的问题是K是一种扩展Number的类型,但它是未知Number子类,这就是编译器的原因引发此错误的原因是Integer只是Number的一个特定子类,因此无法与任何潜在的目标类型匹配。

让我们说明确要强制转换它以使用

进行编译
public <K extends Number> K getValue(){
    Integer a = new Integer(1);
    return (K) a;
}

然后,如果你打电话给它,期望NumberInteger以外的任何子类,你将获得ClassCastException,这正是编译器想要避免的:

Double d = getValue(); <-- throws ClassCastException

作为解决方法,您可以使用Number作为返回类型定义您的方法,如下所示:

public Number getValue() {
    return new Integer(1);
}