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); }