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中的泛型方法Java泛型
- Java:Collection集合、泛型Java泛型
- Java集合和泛型Java泛型
- Java中泛型的詳細解析,深入分析泛型的使用方式Java泛型
- Swift 中的泛型使用Swift泛型
- Java 中泛型的協變Java泛型
- Java 中泛型的全面解析Java泛型
- 深入解析Java中的泛型Java泛型
- Java 中的泛型方法及 FunctionJava泛型Function
- Java 泛型中易混淆的地方Java泛型
- Java 泛型中的萬用字元Java泛型字元
- Java中建立泛型型別的例項Java泛型型別
- Java泛型知識點:泛型類、泛型介面和泛型方法Java泛型
- Java集合與泛型中的幾個陷阱,你掉進了幾個?Java泛型
- Java集合框架中的介面和類Java框架
- Java 集合列舉泛型(一)Java泛型
- Java學習--java中的集合框架、Collection介面、list介面Java框架
- HarmonyOS 專案中泛型的使用泛型
- C#中將DataTable型別轉化為泛型集合C#型別泛型
- Java 中實現集合的 keep in order (後續)Java
- Redis 中的集合型別是怎麼實現的?Redis型別
- Java反射給泛型集合賦值Java反射泛型賦值
- 夯實Java基礎系列13:深入理解Java中的泛型Java泛型
- 集合框架-泛型類的概述及使用框架泛型
- 集合框架-泛型方法的概述和使用框架泛型
- java中泛型之型別萬用字元(?)Java泛型型別字元
- 如何在Java中使用泛型 -ManushaJava泛型
- 如何使用Java泛型對映不同的值型別Java泛型型別
- 泛型集合 list泛型
- 泛型集合 Queue泛型
- 獲取Spring容器中Bean例項的工具類(Java泛型方法實現)SpringBeanJava泛型
- Java泛型的理解與等價實現Java泛型
- 教你如何攻克Kotlin中泛型型變的難點(實踐篇)Kotlin泛型
- 基於泛型的通用Dao介面hibernate實現泛型