Java泛型

tech2023-12-24  76

泛型(Generic)

泛型就是参数化类型,把类型作为可传递参数 常见形式有:泛型类、泛型接口、泛型方法 语法:类名<T> (可以写多个,中间用逗号隔开) 有以下几种常用泛型类型变量

E:元素(Element)K:关键字(Key)N:数字(Number)T:类型(Type)V:值(Value)

好处:

提高代码的重用性防止类型转换异常,提高代码的安全性

泛型类

public class Generic<T> { T t; //使用泛型作为形参 public void myGeneric(T t){ System.out.println(t); } //使用泛型作为返回值 public T getT() { return t; } @Test public void Test(){ Generic<String> generic=new Generic(); generic.myGeneric("Hello Generic"); generic.t="我是全局变量"; System.out.println(generic.getT()); } //输出结果 //Hello Generic //我是全局变量 }

个人感觉实际作用就是为了限制参数类型,保证参数类型都一致 在实例化的时候,Generic<String> generic=new Generic();你给泛型限制的什么类型; 后面的方法或者变量都按照这个类型传递; 除非再实例一个对象传递不同的类型。

(注意)泛型只允许使用引用类型


泛型接口

接口

public interface MyInterface<T> { void show(T t); }

实现类 实现的时候不指定接口的泛型类型(将实现类变成泛型类)

public class MyInterfaceImpl<T> implements MyInterface<T>{ public void show(T t) { System.out.println(t); } @Test public void Test(){ MyInterface myInterface=new MyInterfaceImpl<String>(); myInterface.show("通过泛型类来先不指明是什么类型"); } }

实现的时候指定泛型类型

public class MyInterfaceImpl implements MyInterface<String>{ public void show(String t) { System.out.println(t); } @Test public void Test(){ MyInterface myInterface=new MyInterfaceImpl(); myInterface.show("直接指定泛型类型"); } }

泛型方法

从这里可以很明显的体现出代码重用性,实现了类似重载的功能、代码量也减少了。

public class GenericMethod { public <T> T show(T t){ System.out.println(t); return t; } @Test public void Test(){ GenericMethod genericMethod =new GenericMethod(); genericMethod.show("我输入的是什么类型的值,这个泛型就是什么类型"); genericMethod.show(100); genericMethod.show(3.14); } }

泛型集合

参数化类型、类型安全的集合,强制要求集合元素的类型一致。 特点:

编译时即可检查,而非运行时抛出异常访问时不必类型转换(拆装箱)不同类型的泛型之间不能相互赋值,泛型不存在多态

不使用泛型集合,添加不同类型的元素遍历的时候进行类型转换会发生异常

public void Test(){ ArrayList arrayList=new ArrayList(); arrayList.add(10); arrayList.add("张三"); //使用循环遍历想进行类型转换的时候,会发生转换异常 for (Object o : arrayList) { System.out.println((String) o); } }

使用泛型集合则在你添加不同类型元素的时候会直接报红

public void Test(){ ArrayList<String> list =new ArrayList<String>(); list.add("张三"); list.add("李四"); //如果添加的元素类型不一样,会直接报红 //list.add(100); }
最新回复(0)