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

以下代码抛出编译时exception

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

我理解的是K应该处理任何扩展Number值。

 public  K getValue(){ Integer a = new Integer(1); return a;//Type mismatch: cannot convert from Integer to K } 

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

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

假设您想明确地将其强制转换为使用它进行编译

 public  K getValue(){ Integer a = new Integer(1); return (K) a; } 

然后,如果你调用它期望除了Integer之外的任何子类Number你将得到一个ClassCastException ,这正是编译器想要避免的:

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

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

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