[英]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.