**自java 5;方法返回值基元的協方差。它有效嗎?
我知道,如果在基類中我寫的:
public Number doSomething(){
...
}
在子類中我可以寫這樣的事情
@Override
public Integer doSomething(){
...
}
但是我有一個問題。
如果在基類方法中返回 - 原語 - 數組 - 或Collection。
如何在這種情況下使用協變?
**自java 5;方法返回值基元的協方差。它有效嗎?
我知道,如果在基類中我寫的:
public Number doSomething(){
...
}
在子類中我可以寫這樣的事情
@Override
public Integer doSomething(){
...
}
但是我有一個問題。
如果在基類方法中返回 - 原語 - 數組 - 或Collection。
如何在這種情況下使用協變?
有原語之間沒有協方差。沒有原始類型是任何其他的子類型。所以你不能做到這一點
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;
}
}
同樣,對於Collection
類型
class Parent {
public Collection<String> method() {
return null;
}
}
class Child extends Parent {
public List<String> method() {
return null;
}
}
注意泛型類型參數必須是兼容的(仿製藥沒有協方差,except in bounded wildcards)。
當..太快:) –
無效**收集
@gstackoverflow不,因爲協變不適用於泛型類型。見[這裏](http://stackoverflow.com/questions/2660827/java-generics-covariance)和相關的問題/答案。 –
你能舉一些這種情況的例子嗎?至少是基類方法? –