泛型
- java泛型是JDK1.5中引入的一个新特性,其本质是参数化类型,把类型作为参数传第。
- 常见形式有泛型类、泛型接口、泛型方法。
- 语法
- <T,...> T作为类型占位符,表示一种引用类型。
- 好处:
- 提高代码的重用性
- 防止类型转换异常,提高代码的安全性
泛型类
/**
* 泛型类
* 语法:类名<T>
* T表示类型占位符,表示一种引用类型,可以写多个,用逗号隔开
*/
public class MyGeneric<T> {
//使用泛型T
//1.创建变量 不能实例化
T t;
//2.添加方法 泛型作为参数
public void show(T t){
System.out.println(t);
}
//3.使用泛型作为方法的返回值
public T getT(){
return t;
}
}
public class Test {
public static void main(String[] args) {
//使用泛型类创建对象
//泛型只能是引用类型 不同的泛型类型对象之间不能相互赋值
MyGeneric<String> myGeneric = new MyGeneric<>();
myGeneric.t = "hello";
myGeneric.show("你好");
String String = myGeneric.getT();
MyGeneric<Integer> myGeneric1 = new MyGeneric<>();
myGeneric1.t = 12;
myGeneric1.show(34);
System.out.println(myGeneric1.getT());
}
}
泛型接口
/**
* 泛型接口
* 语法:接口名<T>
* 注意:不能创建泛型静态常量
*/
public interface MyInterface<T> {
String name = "张三";
T server(T t);
}
public class MyInterfaceImpl implements MyInterface<String>{ //方法1:直接确定类型
@Override
public String server(String s) {
System.out.println(s);
return s;
}
}
//测试代码:
//MyInterfaceImpl myInterface = new MyInterfaceImpl();
//myInterface.server("a");
public class MyInterfaceImpl2<T> implements MyInterface<T> { //方法2:让实现类也成为泛型类
@Override
public T server(T t) {
System.out.println(t);
return t;
}
}
//测试代码:
//MyInterfaceImpl2<Integer> myInterfaceImpl2 = new MyInterfaceImpl2<>();
//myInterfaceImpl2.server(1112);
泛型方法
/**
* 泛型方法
* 语法:<T> 返回值类型
*/
public class MyGenericMethod {
//泛型方法
public <T> T show(T t){ //调用方法时根据所传递的参数类型来判断是什么类型
System.out.println("泛型方法");
System.out.println(t);
return t;
}
}
public class Test {
public static void main(String[] args) {
//调用泛型方法
MyGenericMethod myGenericMethod = new MyGenericMethod();
myGenericMethod.show("a");
myGenericMethod.show(2);
myGenericMethod.show(2.2);
}
}
泛型集合
- 概念:参数化类型、类型安全的集合、强制集合的元素的类型必须一致。
- 特点
- 编译时即可检查,而非运行时抛出异常
- 访问时,不必类型转换(拆箱)
- 不同泛型之间引用不能相互赋值,泛型不存在多态