Java中如何使用泛型實現介面中的列表集合?
Java是強制實現Liskov 替換原則:
public interface Bar { } public interface Foo { Bar getBar(); } public class BarImpl implements Bar { } public class FooImpl implements Foo { public BarImpl getBar() { ... } } |
儘管FooImpl中getter方法宣告返回的是介面子類BarImpl,但一切都可以愉快地編譯,因為子類可以替換基類,並且仍然符合 Liskov 替換原則。
但是,如果您嘗試這樣做,則會出現問題:
public interface Foo { List<Bar> getBars(); } public class FooImpl implements Foo { // compiler error... public List<BarImpl> getBars() { ... } } |
在 Java 泛型型別系統中,List<BarImpl>不是List<Bar>. 設計這些東西的人非常聰明,可能有一個很好的技術原因。
解決:
public interface Foo<T extends Bar> { // we know this is "at least" a Bar List<T> getBars(); } public class FooImpl implements Foo<BarImpl> { // compiles great public List<BarImpl> getBars() { ... } } |
在介面中引入泛型T即可。
相關文章
- Java 中的泛型 集合(List,Set) MapJava泛型
- C#中的介面和泛型集合探討C#泛型
- Java中的泛型Java泛型
- Java:Collection集合、泛型Java泛型
- Java中的泛型方法Java泛型
- Java中泛型的詳細解析,深入分析泛型的使用方式Java泛型
- 深入解析Java中的泛型Java泛型
- Java 集合列舉泛型(一)Java泛型
- Java 泛型中易混淆的地方Java泛型
- Java 泛型中的萬用字元Java泛型字元
- Java 中的泛型方法及 FunctionJava泛型Function
- Java集合與泛型中的幾個陷阱,你掉進了幾個?Java泛型
- Java集合框架中的介面和類Java框架
- Java中建立泛型型別的例項Java泛型型別
- Java反射給泛型集合賦值Java反射泛型賦值
- HarmonyOS 專案中泛型的使用泛型
- 獲取Spring容器中Bean例項的工具類(Java泛型方法實現)SpringBeanJava泛型
- 如何在Java中使用泛型 -ManushaJava泛型
- 夯實Java基礎系列13:深入理解Java中的泛型Java泛型
- Java入門教程十二(集合與泛型)Java泛型
- 教你如何攻克Kotlin中泛型型變的難點(實踐篇)Kotlin泛型
- Kotlin中的泛型Kotlin泛型
- Java中基於泛型的交叉型別 - {4Comprehension}Java泛型型別
- C#泛型集合C#泛型
- Java泛型中<?> 和 <? extends Object>的異同分析Java泛型Object
- TypeScript 泛型介面和泛型類TypeScript泛型
- 泛型方法、初始集合和集合的遍歷泛型
- Java泛型理解與使用Java泛型
- 【java】【泛型】泛型geneticJava泛型
- 教你如何攻克Kotlin中泛型型變的難點(上篇)Kotlin泛型
- 教你如何攻克Kotlin中泛型型變的難點(下篇)Kotlin泛型
- 如何自動實現本地AD中禁用的使用者從地址列表中隱藏掉?
- Java集合 Collection、Set、Map、泛型 簡要筆記Java泛型筆記
- Java進階學習之集合與泛型(1)Java泛型
- Java泛型及實踐Java泛型
- Java中的泛型程式設計:深入理解型別引數與型別邊界的使用Java泛型程式設計型別
- Java中如何快捷的建立不可變集合Java
- 介面即泛型泛型