Java:泛型

灵魂拷问

为什么我们需要泛型?

1, 编译时进行类型检查
2,消除类型转换,不需要强转
3,可以复用函数,实现通用的算法

泛型类,泛型接口和泛型方法。

1,泛型类的定义:

// TODO
如何限定类型变量?
  // 规定了泛型 U ,入参必须是 Number 的子类或者本身
    public <U extends Number> void inspect(U u) {
        System.out.println("T: " + t.getClass().getName());
        System.out.println("U: " + u.getClass().getName());
    }
泛型使用中的约束和局限性

1, 静态变量不可以使用泛型表示
2,泛型变量不可以通过 new 来实例化
3,泛型变量不可以通过 instanceof 来判断是否是自身
...

泛型类型能继承吗?
两种方式:
1, class Person<T> extends Animal<T>
2, class Person extends Animal<Object>
泛型中的通配符类型

注:通配符,仅可使用在方法中

//  extends 限定了入参的上界,上界限定符,可获取,不可修改——只读
public static void process(List<? extends Food> list) { /* ... */ }
//  super 限定了入参的下界,下界限定符,可编辑,不可获取—— 只写
public static void process(List<? super Apple> list) { /* ... */ }
虚拟机是如何实现泛型的?
List<Interge> x = new ArrayList<>();
在虚拟机中,等同于:
List<String> x = new ArrayList<>();
他们都相当于:
List<Object> x = new ArrayList<>();

虚拟机中,并未真正实现泛型,我们所申请的泛型变量,在虚拟机中,均会被“类型擦除”

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 泛型概述 由来 泛型是JDK 1.5的一项新特性,在Java语言处于还没有出现泛型的版本时,只能通过Object是...
    小的橘子阅读 3,297评论 0 0
  • 一、基本概念和用法 在Java语言处于还没有出现泛型的版本时,只能通过Object是所有类型的父类和类型强制转换两...
    developerzjy阅读 9,955评论 3 47
  • 参数类型的好处 在 Java 引入泛型之前,泛型程序设计是用继承实现的。ArrayList 类只维护一个 Obje...
    杰哥长得帅阅读 4,400评论 0 3
  • 1、为什么需要泛型? 1.1可以为多种数据类型执行相同的代码 我们可以看到上面这段代码,int类型,float类型...
    Android_Gleam阅读 2,642评论 0 3
  • 一、引入泛型机制的原因 假如我们想要实现一个String数组,并且要求它可以动态改变大小,这时我们都会想到用Arr...
    Q南南南Q阅读 3,584评论 0 1

友情链接更多精彩内容