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