美文网首页
15.4.1 杠杆利用类型参数推断(古早Java)

15.4.1 杠杆利用类型参数推断(古早Java)

作者: 陈晓松快点跑 | 来源:发表于2024-10-29 22:40 被阅读0次

Map<Person, List<? extends Pet>> petPepole = New.map();
Map<Person, List<? extends Pet>> petPeople = new HashMap<Person, List<? extends Pet>>();

看这两行代码的对比↑↑↑


人们对泛型有一个抱怨,使用泛型有时候需要向程序中加入更多的代码。考虑第11章中的MapOfList.java类,如果要创建一个持有List的Map,就要像下满这样:




Map<Person, List<? extends Pet>> petPeople = 
new HashMap<Person, List<? extends Pet>>(); // 抱怨需要加入过多的代码



看到了吧,你在重复自己做过的事情,编译器本来应该能够从泛型参数列表中的一个参数推断出另一个参数。唉,可惜的是,编译器暂时还做不到。然而,在泛型方法中,类型参数推断可以为我们简化一部分工作。

例如,我们可以编写一个工具类,它包含各种各样的static方法,专门用来创建各种常用的容器对象:

public class New {
    public static <K, V> Map<K, V> map() {
        return new HashMap<K, V>();
    }

    public static <T> List<T> list() {
        return new ArrayList<T>();
    }

    public static <T> LinkedList<T> lList() {
        return new LinkedList<T>();
    }

    public static <T> Set<T> set() {
        return new HashSet<T>();
    }

    public static <T> Queue<T> queue() {
        return new LinkedList<T>();
    }

    public static void main(String[] args) {
        Map<String, List<String>> sls = New.map();
        List<String> ls = New.list();
        LinkedList<String> lls = New.lList();
        Set<String> ss = New.set(); // 这里看的最明显 New.set() 看着是不是简洁了不少.
        Queue<String> qs = New.queue();
    }
}

Set<String> ss = New.set();
这里看的最明显 New.set() 看着是不是简洁了不少.


这真的是古早的Java,可能作者在编写Tink in Java 的时候,Java就是这个样子。
但是我现在用的Java好像能做到了。
以前必须这样

Map<Person, List<? extends Pet>> petPeople = new HashMap<Person, List<? extends Pet>>();

现在可以这样

Map<Person, List<? extends Pet>> petPeople2 = new HashMap<>();

相关文章

  • 【C++ Templates(14)】模板实参推断

    推断的过程 对函数调用,推断会比较实参类型和模板参数类型(即T),对要被推断的参数分别推断出替换,每个实参-参数对...

  • 第三章.动态类型

    动态类型语言中的类型是在运行时推断的方法及其参数也在运行时接受检查的。 一、Java中的类型 略(介绍Java类型...

  • 推断统计-假设检验

    推断统计是研究如何利用样本数据来推断总体特征的统计方法。包含参数估计和假设检验。参数估计即利用样本信息推断总体特征...

  • 【runoob.7】函数定义

    表达式作为函数体,返回类型自动推断: 无返回值的函数(类似Java中的void): 可变长参数函数 函数的变长参数...

  • 统计中的假设检验

    推断统计的概念 推断统计是研究如何利用样本数据来推断总体特征的统计方法。包含两个内容:参数估计,即利用样本信息推断...

  • Kotlin 类型

    类型推断 Kontlin 和 Java 一样,是强类型语言,但 Kotlin 支持类型推断,变量和方法,如果可以推...

  • 函数与泛型

    函数声明 为函数定义类型 可选参数、默认参数、类型推断、剩余参数 泛型 我们需要一种方法使返回值的类型与传入参数的...

  • 假设检验

    参数估计和假设检验是统计推断的2个组成部分,它们从不同角度利用样本对总体进行推断。在参数估计中,总体参数是未知的,...

  • Swift中的几个高阶函数

    sort 有一个数组 // 编译器可以自动推断出返回类型,所以可以省略 // 编译器可以自动推断出参数类型 // ...

  • Swift 中的闭包

    1. 闭包表达式语法 下面是利用闭包对数组进行反向排序的一个例子: 2. 根据上下文推断类型 上文中的参数类型和返...

网友评论

      本文标题:15.4.1 杠杆利用类型参数推断(古早Java)

      本文链接:https://www.haomeiwen.com/subject/pexvdjtx.html