目录
/* 泛型类,T 表示 Java 中的任意类型,
也就是说构造方法中 data 属性可以传递任意类型的值*/
class ResultData<T>{
Integer code;
String msg;
T data;
public ResultData(Integer code,String msg,T data){
this.code=code;
this.msg=msg;
this.data=data;
}
}
// 泛型接口
interface MyInterface<T>{
public void test(T t);
}
// 泛型方法的定义方式,必须在返回值类型之前加上 <T> 泛型类型,才能在方法中使用泛型类
public static <T> T toObject(String json,Class<T> tClass) throws JsonProcessingException {
ObjectMapper mapper=new ObjectMapper();
T t = mapper.readValue(json, tClass);
return t;
}
// ? 表示任意类型
public static void test1(List<?> list){
for (Object o : list) {
System.out.println(o);
}
}
/**
* 上下边界
* 上边界:? extends 类名,此时的 ? 必须是此类的子类或类本身
* 下边界:? super 类名,此时的 ? 必须是此类的父类或类本身
*/
public static <T> void test2(List<? extends Comparable<T>> list){
}
public static void test3(List<? super Number> list){
}
List<String> stringList=new ArrayList<>();
List<Object> objectList=new ArrayList<>();
List<Number> numberList=new ArrayList<>();
List<Integer> integerList=new ArrayList<>();
// test1 方法均可调用
test1(stringList);
test1(objectList);
test1(numberList);
test2(integerList);
test2(stringList);
test2(integerList);
test2(objectList); // 报错,传入的类型必须是Comparable的实现类或 Comparable本类
test2(numberList); // 报错,传入的类型必须是Comparable的实现类或 Comparable本类
test3(objectList);
test3(numberList);
test3(integerList); // 报错,传入的类型必须是Number的父类或 Number本类