簡體   English   中英

子類中的下限高程

[英]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 (因為方法getI中聲明)但我期望它將采用II的下限。 如何重構此層次結構,以便編譯器將Number視為下限。 唯一的限制是I不能修改接口,因為它是庫的一部分。

更新:這個想法是我想要一個通用的解決方案

    II ii = <any instance of classes that implements interface II>
    Number n = ii.get();

其他一切正常,聲明需要更改為II<Integer> ii = new A(); ,然后它工作。

對於AB ,您可以使用II<? extends Number> = new A(); II<? extends Number> = new A();

您不應該使用原始類型II 將其替換為II<?> ,一切都會正常工作:

II<?> ii = new A();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM