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

Man*_*hKr 4 java generics

以下代码抛出编译时异常

类型不匹配:无法从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)

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

Nic*_*tto 5

这里的问题是这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)