[英]Lower bound elevation in sub classes
我有一個可以簡化為以下示例的類層次結構
public interface I<T> {
T get();
}
public interface II<T extends Number> extends I<T> {
}
public class A implements II<Integer> {
@Override
public Integer get() {
return null;
}
}
public class B implements II<Double> {
@Override
public Double get() {
return null;
}
}
現在,當我嘗試編譯以下代碼時
II ii = new A();
Number n = ii.get();
我收到編譯器錯誤(在第 2 行)
java: incompatible types: java.lang.Object cannot be converted to java.lang.Number
我知道這是因為它采用了I
的下限,即Object
(因為方法get
在I
中聲明)但我期望它將采用II
的下限。 如何重構此層次結構,以便編譯器將Number
視為下限。 唯一的限制是I
不能修改接口,因為它是庫的一部分。
更新:這個想法是我想要一個通用的解決方案
II ii = <any instance of classes that implements interface II>
Number n = ii.get();
其他一切正常,聲明需要更改為II<Integer> ii = new A();
,然后它工作。
對於A
和B
,您可以使用II<? extends Number> = new A();
II<? extends Number> = new A();
您不應該使用原始類型II
。 將其替換為II<?>
,一切都會正常工作:
II<?> ii = new A();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.