方法返回原语的协方差。 它有效吗?

**自java 5;

我知道如果在基类中我写:

public Number doSomething(){ ... } 

在孩子class上我可以写这样的东西

 @Override public Integer doSomething(){ ... } 

但我有一个问题。

如果在基类方法中返回 – primitive – array – 或Collection。

在这种情况下如何使用协变?

原语之间没有协方差。 没有原始类型是任何其他类型的子类型。 所以你不能这样做

 class Parent { public int method() { return 0; } } class Child extends Parent { public short method() { // compilation error return 0; } } 

出于同样的原因, intshort相应数组类型也不是协变的。

对于数组类型,它与您的Number示例类似

 class Parent { public Number[] method() { return null; } } class Child extends Parent { public Integer[] method() { return null; } } 

类似于Collection类型

 class Parent { public Collection method() { return null; } } class Child extends Parent { public List method() { return null; } } 

请注意,generics类型参数必须兼容(generics中没有协方差, 但有界通配符除外 )。

  1. 原始的:没有
  2. array:仅当它是父类数组类型的子类型时
  3. 或collections:与2相同