Ion*_*tan 8 java generics numbers
关于这段代码,我错过了什么?
public class Zero<N extends Number> {
public N zero() {
return new Integer(0);
}
}
Run Code Online (Sandbox Code Playgroud)
它说:
类型不匹配:无法从Integer转换为N.
谢谢!
更新我已将代码段更改为使用整数.同样的事情发生了 甚至在创建匿名子类时也会发生这种情况Number.这可能是Eclipse的错吗?
Rev*_*nzo 12
不保证Integer是N的超类,因此不能只将Integer值设置为N类型的对象.
想想这样说:如果有人实例Zero<N>为Zero<Double>,类实际上就变成:
public class Zero {
public Double zero() {
return new Integer(0);
}
}
Run Code Online (Sandbox Code Playgroud)
这显然是无效的.
此外,您也无法做到return 0,因为以同样的方式,编译器无法知道如何将其转换为N.(编译器只能知道它所知道的自动代码类型,但通过使用泛型,您扩展了可用的类型还包括Number的自定义实现.)
| 归档时间: |
|
| 查看次数: |
1326 次 |
| 最近记录: |