Java- 泛型

参考文章:https://juejin.cn/post/6844903925666021389

目录

1.泛型概述
2.泛型的使用
3.泛型的继承和通配符


1. 泛型概述

1.1 什么是泛型

  • Java泛型(generics)是JDK 5中引入的一个新特性,在很大的程度上方便在集合上的使用。

  • 泛型的本质是 参数化类型,即给类型指定一个参数,然后在使用时再指定此参数具体的值,那样这个类型就可以在使用时决定了

1.2 泛型的目的

  • 泛型的出现避免了强转的操作,在编译器完成类型转化,也就避免了运行的错误。

1.3 <泛型使用例子>:

注意:只能是引用类型

 Person<String> person = new Person<>("字符串");
 Person<Integer> person1 = new Person<Integer>(2);
 Person<Person> person2 = new Person<>(person);

class Person<E>{
	E s;
	public Person(E s) {
		this.s = s;
	}
}

正常写 List list = new ArrayList(); 时,默认给它的泛型是 Object。


2. 泛型的使用

泛型有三种常用的使用方式:泛型类,泛型接口和泛型方法

2.1 泛型类

class Person<E>{//如果创建对象时没有指定类型,默认是 Object
	E s;
	public Person(E s) {
		this.s = s;
	}
}

这样定义的类就是一个自定义泛型类,其他的泛型类就是那些容器类,如List,Set等。

注意事项:由于使用自定义泛型的类,只有在实例化的时候才知道这个类型参数是什么,所以导致(1)使用泛型的数组不能初始化;(2)静态方法和静态属性并不能使用泛型。

2.2 泛型接口

public interface Test_ <E>{
	//...
}

注意:泛型接口的类型,在继承接口 或者 实现接口时确定。(默认Object)

2.3 泛型方法

public <E,W> void Come(E e){
   //...
}

注意:“泛型方法”和“方法使用泛型”并不是同一回事!


3. 泛型的继承 和 通配符
  • 泛型不具备继承性。
    List<Object> list = new ArrayList<String>();【错误】

  • <?>:支持任意泛型类型。

  • <? extends A>:支持A类以及A类的子类,规定了泛型的上限。

  • <? super A>:支持A类以及A类的父类,不限于直接父类,规定了泛型的下限。

posted @ 2021-11-03 15:44  Wiiiimp  阅读(47)  评论(0编辑  收藏  举报