簡體   English   中英

有沒有辦法在不使用Java進行強制轉換的情況下返回通用超類型?

[英]Is there a way to return a generic supertype without casting in Java?

說我有這些課程:

interface Field<T> {}

interface Function<T> extends Field<T> {}

interface UnaryFunction<INPUT, OUTPUT> extends Function<OUTPUT> {}

class UnaryFunctionImpl<INPUT, OUTPUT> implements UnaryFunction<INPUT, OUTPUT> {

  public Function<INPUT> asField() {
    return (Function<INPUT>) this;
  }

}

為什么asField()需要強制轉換? 從理論上講這是不合理的,還是編譯器不夠聰明?

答案是不。 因為Function<INPUT>Function<OUTPUT>是不同的類型,所以您必須告訴編譯器您對自己的行為負責。

UniaryFunction<INPUT, OUTPUT>Function<OUTPUT>不是 Function<INPUT> ,因此除非INPUT和OUTPUT是相同類型,否則UniaryFunction<INPUT, OUTPUT> 是錯誤的

如果輸入和輸出類型相同,則代碼為:

class UnaryFunction<T, T> extends Function<T> {
  public Function<T> asSupertype() {
    return this;
  }
}

...導致強制類型轉換和asSupertype()過時。

暫無
暫無

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

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