Java和泛型.不是0号吗?

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的错吗?

Chr*_*bek 13

虽然Integer是一个数字,但整数可能与N不兼容,N可以是Number的任何子类.


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的自定义实现.)