以下代码抛出编译时异常
Type mismatch: cannot convert from Integer to K
我的理解是 K
应该处理扩展 Number
的任何值。
public <K extends Number> K getValue(){
Integer a = new Integer(1);
return a;//Type mismatch: cannot convert from Integer to K
}
(注意:这只是一个测试代码,用于提出我的问题,没有提供与我的实际场景无关的细节。)
最佳答案
这里的问题是 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);
}
关于Java 泛型 : Type mismatch: cannot convert from Integer to K,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50479680/