JavaSE8️⃣泛型
1、泛型
泛型(Java 1.5+)
- 含义(本质):参数化类型,把类型作为参数传递。
- 语法:
<类型占位符>
,表示一种引用类型(多个占位符以,
分隔)。 - 好处:
- 复用性。
- 安全性,防止类型转换异常。
2、常见形式
2.1、泛型类
-
语法:
访问修饰符 class 类名<类型占位符> { }
-
说明:
- 不同泛型类型的对象不能相互赋值。
- 在泛型类中,可以使用泛型类型(如变量类型、参数类型、方法返回值类型)。
- 在泛型类的外部,无法直接使用泛型类型,需使用确定的引用类型。
示例
-
定义泛型类:
public class myGeneric<T>{ private T t; public T getT() { return t; } public void setT(T t) { this.t = t; } }
-
使用:
// String myGeneric<String> mg1 = new myGeneric<String>(); mg1.setT("tang"); String str = mg1.getT(); // Integer myGeneric<Integer> mg2 = new myGeneric<Integer>(); mg2.setT(10); Integer num= mg2.getT(); // 尝试赋值 mg1 = mg2; // 报错
2.2、泛型接口
-
语法:
访问修饰符 interface 接口名<类型占位符> { }
-
说明:
- 不同泛型类型的对象不能相互赋值。
- 在泛型接口中,可以使用泛型类型(无法创建泛型静态常量)。
- 在接口实现类中,可以继续使用泛型,也可使用确定的引用类型。
- 使用泛型:成为泛型类。
- 确定类型:所有泛型占位符替代为确定类型,成为普通类。
示例
定义泛型接口:
public interface MyInterface<T> {
String nameString="tang";
T server(T t);
}
-
泛型实现类:
public class MyInterfaceImpl implements MyInterface<String> { @Override public String server(String t) { System.out.println(t); return t; } }
-
普通实现类:
public class MyInterfaceImpl2<T> implements MyInterface<T>{ @Override public T server(T t) { System.out.println(t); return t; } }
2.3、泛型方法
-
语法:
访问修饰符 <T> 返回值类型 方法名(参数列表) { }
-
示例:
-
定义:
public class MyGenericMethod { public <T> void show(T t) { System.out.println("泛型方法" + t); } }
-
使用:
MyGenericMethod myGenericMethod=new MyGenericMethod(); myGenericMethod.show("tang"); myGenericMethod.show(200); myGenericMethod.show(3.14);
-
3、泛型集合
泛型集合:参数化类型、类型安全的集合,强制集合元素的类型必须一致。
特点:
- 编译期检查元素类型,避免运行异常。
- 访问时无需做类型转换(拆箱)。