泛型

it2022-05-05  110

泛型

(1)概述

​ 是一种把类型明确的工作推迟到创建对象 或者调用方法的时候才去明确的特殊的类型。 ​ 参数化类型,把类型当作参数一样的传递。

(2)格式

<数据类型> 这里的数据类型只能是引用数据类型

JDK1.7之前 泛型前面后面都得写上,JDK1.7可以省略右半边不写

(3)好处

​ 1.把运行时期的问题提前到了编译期间

避免了强制类型转换 3.优化了程序设计,解决了黄色警告线 注意:泛型只在编译期有效 但在运行期就擦除了

4.泛型可以限定,我这个集合中存储什么样的引用数据类型

(4)举例

public class Demo1 { public static void main(String[] args) { ArrayList list2 = new ArrayList(); list2.add("aaaaa"); list2.add("bbbb"); list2.add("ccc"); list2.add("ddd"); Object obj = list2.get(0); String string= (String) obj; int i=string.length(); System.out.println(i); //泛型可以避免向下转型 ArrayList<String> list3= new ArrayList(); list3.add("aaaaa"); list3.add("bbbb"); list3.add("ccc"); list3.add("ddd"); String s = list3.get(0); System.out.println(s); } }

结果:

aaaaa

aaaaa

(5)泛型方法

泛型方法概述: 把泛型定义在方法上

定义格式: public <泛型类型> 返回类型 方法名(泛型类型 变量名)

public class MyTest2 { public static void main(String[] args) { MyClass<String> stringMyClass = new MyClass<>(); stringMyClass.setT("abc"); String t = stringMyClass.getT(); MyClass<Integer> integerMyClass = new MyClass<>(); integerMyClass.setT(100); Integer t1 = integerMyClass.getT(); } class MyClass<T> { //泛型<T> 我把泛型加在类上 T t; public T getT() { return t; } public void setT(T t) { this.t = t; } } }

(6)泛型接口

泛型接口概述: 把泛型定义在接口上

定义格式: public interface 接口名<泛型类型>

public class MyTest3 { public static void main(String[] args) { //接口上的泛型,在你创建该接口的子类对象时,必须要明确这个泛型,具体是什么数据类型 MyDemo2<Integer, String, String> integerStringStringMyDemo2 = new MyDemo2<>(); Collection<Integer> collection=new ArrayList<Integer>(); //匿名内部类 在创建接口的子类对象时,就必须明确接口上的泛型,到底是什么类型 new MyInterface<String,String,String>(){ @Override public String show(String s, String s2) { return null; } }; } interface MyInterface<T,U,R> { //泛型接口 public R show(T t,U u); } class MyDemo2<T, U, R> implements MyInterface<T, U, R>{ @Override public R show(T t, U u) { return null; } } }

最新回复(0)