美文网首页
为何泛型容器中的方法参数保留Object

为何泛型容器中的方法参数保留Object

作者: 1nfinity | 来源:发表于2019-01-07 20:47 被阅读0次

今天在阅读的时候突然发现一个问题, 官方工具库里面的泛型容器有一部分方法并未使用泛型方法, 而是依旧沿用JDK1.5之前的Object, 例如:

  • Map
      boolean containsKey(Object key);
    
      boolean containsValue(Object value);
    
      V get(Object key);
    
      V remove(Object key);
    
      boolean equals(Object o);
    
      ...
    
    • List
      boolean contains(Object o);
    
      boolean remove(Object o);
    
      boolean equals(Object o);
    
      ...
    
    • 原因
      1. 这些含Object类型参数的方法都有一个共同特点, 即需要与容器内的Key或者Value进行比较, 而在Java的规范中, 比较是不需要类型完全相同的, 例如Number类型的实例可以和Long类型的实例相比较
      2. 在Java中比较方法需要重写Object中的equals(Object o), 所以用到equals(Object o)的方法的参数自然用Object而不是泛型
    • 你们以为这就完了吗?
    • ...
    • ...
    • ...
    • 反驳: 使用Object可能造成的错误比原因1中的好处要大得多, 而且涉及到equals完全可以重新创建一个方法例如getByEquals(Object o)get(K k)一起使用
    • 个人结论: 可能存在设计缺陷(不要打我...)
    • 佐证: 在比Java新的C#中, Map(Dictonary)的get方法参数是(K k)

相关文章

  • 为何泛型容器中的方法参数保留Object

    今天在阅读的时候突然发现一个问题, 官方工具库里面的泛型容器有一部分方法并未使用泛型方法, 而是依旧沿用JDK1....

  • Java 泛型

    泛型类 例如 泛型接口 例如 泛型通配符 泛型方法 类中的泛型方法 泛型方法与可变参数 静态方法与泛型 泛型上下边...

  • 泛型学习

    1.泛型是Java中参数化类型的方式。将类型也作为一种参数进行传递。2.它有泛型的方法,泛型参数,泛型类。3.泛型...

  • 泛型

    泛型就是对参数类型的增强。允许一些自定义类型作为泛型的参数类型泛型可以使用在类中、构造方法、方法、接口、数组中、还...

  • 泛型

    泛型概述 1:什么是泛型?: 泛型:“参数化类型”,可以从字面理解,参数化,在我们用参数中,定义方法用形参,调用传...

  • Java并发编程

    Java泛型(类型参数化)接口或者类泛型,类型参数放在接口名或者类名后面方法中的泛型参数放在修饰符public/p...

  • 泛型的用法

    一、泛型方法1、函数的参数是泛型下面是定义泛型方法的规则:所有泛型方法声明都有一个类型参数声明部分(由尖括号分隔)...

  • 第十五章:泛型

    泛型实现了参数化类型的概念。 简单泛型 容器是出现泛型的重要原因之一。泛型的主要目的之一就是用来指定容器要持有什么...

  • Java 语法糖及实现

    Java 中的泛型 泛型是什么 泛型,即“参数化类型”,最熟悉的就是定义方法时有形参,然后调用此方法时传递实参。 ...

  • Java泛型

    泛型有三种实现方式,分别是泛型接口、泛型类、泛型方法。下面通过泛型方法来介绍什么是类型参数。 泛型方法声明方式:访...

网友评论

      本文标题:为何泛型容器中的方法参数保留Object

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