-
泛型的基本应用
1.泛型类定义
public class Point<T> {
private T t;
Point(T t) {
this.t = t;
}
private void setT(T t) {
this.t = t;
}
private T getT() {
return this.t;
}
}
2.泛型对象的创建
public class DemoTest {
public static void main(String[] args) {
Point<Integer> point= new Point<Integer>(123);
}
}
注意:
- 在创建泛型对象时,类型不能是基本的数据类型
- 在创建泛型对象时,最好知道对象的类型,避免出现泛型的安全警告
-
泛型的通配符、受限泛型的上限和下限
通配符(?)
public static void fun1(Point<?> t) {
System.out.println(t.toString());
}
通过在方法的参数中添加?通配符。使得这个方法的参数可以传递这个泛型的各种类型的对象
受限泛型的上限(extends)
public static void fun2(Point<? extends Number> t) {
System.out.println(t.toString());
}
通过extends 关键字,可以设置泛型的参数上限,传入的参数类型必须是Number或者Number的子类。否则会报错。
受限泛型的下限(super)
public static void fun3(Point<? super Number> t) {
System.out.println(t.toString());
}
通过super关键字,可以设置泛型的参数下限,传入的参数类型必须是Number或者Number的父类。否则会报错。
-
泛型与子类继承的限制
在泛型中,子类的泛型类是不能使用父类的泛型类型接收的。既:无法使用向上转型。
-
泛型接口
泛型接口的定义
public interface Info<T> {
}
泛型接口的实现
1.在实现类上声明泛型类型
public class InfoImpl<T> implements Info<T> {
private T t;
public T getVar() {
return this.t;
}
}
2.在实现类上直接指定具体的类型
public class InfoImpl implements Info<String> {
public String getVar() {
return "123123";
}
}
-
泛型方法
定义泛型方法
public <T> T fun4(T t){
return t;
}
注意:泛型方法可以在泛型类中,也可以在普通的类中。
通过泛型方法返回泛型类实例
public <T extends Number> Point<T> fun(T t) {
Point<T> point = new Point<T>(t);
return point;
}
使用泛型统一传入的参数类型
public static <T> void add(Info<T> t1,Info<T> t2){
System.out.println(t1.getVar() + "" + t2.getVar());
}
泛型数组
public class DemoArr {
public static void main(String[] args) {
String strArr[] = fun1("s1", "s2", "s3");
fun2(strArr);
}
public static <T> T[] fun1(T... arg) {
return arg;
}
public static <T> void fun2(T arr[]) {
for (T t : arr) {
System.out.println(t.toString());
}
}
}