美文网首页
泛型简单理解

泛型简单理解

作者: 浩仔_Boy | 来源:发表于2020-12-31 15:10 被阅读0次

学习总结,仅供自己参考,如有不对欢迎指正

泛型

1.作用:

1.不需要再进行类型转化
2.保证ClassCastException的异常,可以在编译器全部暴露出来

2.使用场景:

一个类或者接口,他的成员变量和方法的类型是不固定的。

3.类型擦除:

作用:避免过多的创建类而造成的运行时的过度消耗

image.png

利用类型擦除的原理,用反射的手段就绕过了正常开发中编译器不允许的操作限制。

4.泛型上界(协变)和下界(逆变)

List<? extends Animal> animals = new LinkedList<A>();
A可以是Animal及其子类,Animal是A的上界。,从集合中取出一个去个元素拿来消费。

List<Cat>并不是List<Animal>的子类型,但Java通过其它方式来支持了泛型的协变,List<Cat>是List<? extends Animal>的子类型

// A可以是Cat及其父类,Cat是A的下界
List<? super Cat> cats = new LinkedList<A>();

? Entends T 表示该集合中存在的都是类型T的子类,包括T自己。
? Super T 表示该集合中存的都是类型T的父类,包括T自己。

5.? Entends T 和 ? Super T的区别

ArrayList<? extends Animal> animals = ArrayList<Dog>();
不能用add(item)

ArrayList<? super Dog> fruits = ArrayList<Animal>();
不能用get(item)

6.泛型方法:

泛型类在实例化的时候就需要指定类型,即T是什么。泛型方法则可以在该方法被调用的时候才进行实例化,更加灵活。

public interface AnimalShop<T>{
    <E> E getAnimal(String type)
    //可以用来限制方法的类型之间的关系
    <E> void addToList(E item ,List<E> list){
    }
}

类型推断:
赋值时类型推断 函数默认会进行推断 返回值的属性推断
比如findViewById

7.对一个对象类型进行多重限制

<E extends Runnable & Serializable> void someMethod(E param)

8.通配符

image.png
如上图所示,List<?>不能add,get出来也是Object类型。它同时具有协变和逆变的两种性质,也有两者的限制。
在kotlin中*等同于,Java中的?Any等同于Object
image.png
参考 https://blog.csdn.net/yasinshaw/article/details/111878133

kotlin中泛型

  • image.png
    out代替Java重的? entends T 。我们能够将使用子类泛型的对象赋值给使用父类泛型的对象。
  • image.png
    in代替 java中的? super T。我们可以将使用父类泛型的对象赋值给使用子类泛型的对象
  • image.png

相关文章

  • 泛型简单理解

    学习总结,仅供自己参考,如有不对欢迎指正 泛型 1.作用: 1.不需要再进行类型转化2.保证ClassCastEx...

  • JDK1.5后增加了泛型,那么为什么要有泛型呢?我们该如何自定义

    本篇主要讲解java泛型的理解、集合中简单使用泛型、自定义泛型结构(包括类、接口、方法)。 一、什么是泛型? 通俗...

  • Typescript(十三)泛型

    泛型:[generic - 通用、泛指的意思],那最简单的理解,泛型就是泛指的类型。 一:函数中的泛型 1:定义一...

  • 6.6 Swift语言中的泛型编程 [Swift教程]

    1. 本节课将为你解析泛型的使用。泛型是另外一种可以使编码更加简单、快捷的方式。你可以将泛型简单理解为:泛指所有类...

  • Swift笔记<十九>泛型

    泛型概念 简单理解就是一个"泛化"的类型,并不特指某一个具体类型 泛型的使用 泛型作为函数的参数或返回值 与结构体...

  • Java泛型 --(1)泛型基础篇

    主要内容 (1)能够定义简单的泛型类、泛型方法(2)知晓类型变量的限定规则和应用(3)理解虚拟机是如何解析泛型代码...

  • 2、泛型方法

    从来没写过泛型方法,这次项目中用到了。泛型方法理解:(1)对比泛型类,List,我的理解是:泛型为了防止不必...

  • 泛型

    1.如何理解泛型? 1)参数化类型,是JDK1.5的新特性。(定义泛型时使用参数可以简单理解为形参)2)编译时的一...

  • Java泛型

    本文介绍的知识点 泛型是什么? 泛型的使用在反射中使用泛型在集合类中使用泛型 关于泛型擦除如何理解?如何避免泛型擦...

  • Java泛型-你可能需要知道这些

    本博文为Java泛型扫盲文,争取读完后能理解泛型并使用泛型。 1. 几个知识点 1.1 什么是泛型 泛型的本质是参...

网友评论

      本文标题:泛型简单理解

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