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

Java 方法返回原语的值协方差。它有效吗?,java,covariance,Java,Covariance,**自Java5以来 我知道如果在基类中我写: public Number doSomething(){ ... } 在儿童课上,我可以写这样的东西 @Override public Integer doSomething(){ ... } 但我有一个问题 如果在基类中,则返回 -原始的 -排列 -或收藏 在这种情况下如何使用协变函数 原语:没有 数组:仅当它是父数组类型的子类型时 或收藏:与2相同 原语之间没有协方差。没有任何基元类型是任何其他基元类型的子类型。所以你不能这么做 c

**自Java5以来

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

public Number doSomething(){
...
}
在儿童课上,我可以写这样的东西

@Override
public Integer doSomething(){
    ...
}
但我有一个问题

如果在基类中,则返回 -原始的 -排列 -或收藏

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

  • 原语:没有
  • 数组:仅当它是父数组类型的子类型时
  • 或收藏:与2相同

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

    class Parent {
        public int method() {
            return 0;
        }
    }
    
    class Child extends Parent {
        public short method() { // compilation error
            return 0;
        }
    }
    
    出于同样的原因,
    int
    short
    的对应数组类型也不是协变的

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

    class Parent {
        public Number[] method() {
            return null;
        }
    }
    
    class Child extends Parent {
        public Integer[] method() {
            return null;
        }
    }
    
    类似地,对于
    集合
    类型

    class Parent {
        public Collection<String> method() {
            return null;
        }
    }
    
    class Child extends Parent {
        public List<String> method() {
            return null;
        }
    }
    
    类父类{
    公共收集方法(){
    返回null;
    }
    }
    类子级扩展父级{
    公共列表方法(){
    返回null;
    }
    }
    

    注意泛型类型参数必须是兼容的(泛型中没有协方差,)。

    你能给出一些例子吗?至少基类方法?在父类中不是有效集合,在子类中不是有效集合?@gstackoverflow No,因为协方差不适用于泛型类型。请参阅和相关问题/答案。@erickson什么是非法的?不管怎样,像这样清洁。谢谢。@Sotirios Delimanolis我认为原语数组就是一个很好的例子response@gstackoverflow你的意思是你想让我添加一个不起作用的原语示例?