泛型
java泛型是JDK5引用的一个新特性。反省的本质就是类型参数化,将类型指定为参数进行传递。
泛型的好处
1、编译期类型安全。 2、避免了强制类型转换时的异常。 3、一个类可以操作多种类型的数据,提高了代码的复用性。
泛型类
/** * 泛型类 * 语法:类名<T>,类型<T,E>.多个参数间用,(逗号)隔开 * T,V,K,E.通配符。 * * @Author: wangwang * @Date: 2022-12-16-0:49 * @Description: */ public class MyGeneric<T> { //定义泛型变量。T t不能被实例化,因为在T被具体指定之前,无法判断T是否存在无参构造方法 T t; //使用泛型作为方法参数 public void show(T t) { System.out.println(t); } //使用泛型作为返回类型 public T getT() { return t; } }
/** * 泛型类的使用 * * @Author: wangwang * @Date: 2022-12-16-0:56 * @Description: */ public class TextGeneric { public static void main(String[] args) { //实例化泛型对象 //使用泛型作为类型传递只能传递引用类型; MyGeneric<String> generic = new MyGeneric<>(); generic.t = "hello word!"; //调用泛型作为参数的方法 generic.show("你好!"); //调用泛型返回值方法 String str = generic.getT(); System.out.println(str); MyGeneric<Integer> generic1 = new MyGeneric<>(); //这里因为在编译期间会涉及到类型擦除,将String和Integer进行擦除,去使用到他们的原始类型,也就是Object替代 generic = generic; System.out.println(generic1.getT()); //不允许不同泛型对象之间相互赋值。 // MyGeneric<Integer> generic2 = generic; } }
泛型接口
/** * 泛型接口 * 语法:接口名<T> * @Author: wangwang * @Date: 2022-12-16-2:08 * @Description: */ public interface MyGenericInterface<T> { //定义泛型接口 T get(T t); }
1、实现类指定接口类型
/** * 泛型接口实现类 指定接口类型 * * @Author: wangwang * @Date: 2022-12-16-2:09 * @Description: */ public class MyGenericInterfaceImpl implements MyGenericInterface<String> { @Override public String get(String s) { return s; } }
2、实现类不指定接口类型
/** * 泛型接口实现类 不指定接口类型,而是在实例化实现类时去指定 * * @Author: wangwang * @Date: 2022-12-16-2:12 * @Description: */ public class MyGenericInterfaceImpl2<T> implements MyGenericInterface<T> { @Override public T get(T t) { return null; } }
泛型接口的使用
MyGenericInterfaceImpl myGenericInterface = new MyGenericInterfaceImpl(); String s = myGenericInterface.get("123");//已经指定接口类型为String,所以不能传入其他类型 System.out.println(s); //类型如果不指定,则使用原始类型Object MyGenericInterfaceImpl2 myGenericInterfaceImpl2 = new MyGenericInterfaceImpl2(); Object o = myGenericInterfaceImpl2.get("213"); System.out.println(o); //指定类型为Integer,则不能再传入其他类型 MyGenericInterfaceImpl2<Integer> myGenericInterfaceImpl21 = new MyGenericInterfaceImpl2<>(); Integer r = myGenericInterfaceImpl21.get(new Integer(131)); System.out.println(r);
泛型方法
/** * 泛型方法 * 语法:修饰符 <T> 返回类型 * * @Author: wangwang * @Date: 2022-12-16-2:28 * @Description: */ public class MyGenericMethod { public <T> void get(T t) { System.out.println("返回结果:" + t); } }
泛型方法的使用
MyGenericMethod myGenericMethod = new MyGenericMethod(); //调用泛型方法不需要去指定类型,它是根据我们传入的参数来判断方法的类型 myGenericMethod.get("213"); myGenericMethod.get(1); myGenericMethod.get('1');

浙公网安备 33010602011771号