现象:
泛型基础使用
泛型本质
在创建对下或调用方法的时候才明确下具体的类型
参数类型可以用在类、接口和方法中,分别被称为泛型类、泛型接口、泛型方法。
Java泛型中的标记符含义:
? - 表示不确定的java类型
T - Type(Java 类)
E - Element (在集合中使用,因为集合中存放的是元素)
K - Key(键)
V - Value(值)
N - Number(数值类型)
泛型通配符
1. 无边界的通配符
//表示类型参数可以是任何类型
public class Apple<?>{}
List<?>
2.固定上边界的通配符
//表示类型参数必须是A或者是A的子类
public class Apple<T extends A>{}
<? extends A>
3. 固定下边界的通配符
//表示类型参数必须是A或者是A的超类型
public class Apple<T supers A>{}
优点:
代码简洁、重复使用、保证了类型的安全性、消除强制转换、避免了不必要的装箱、拆箱操作,提高程序的性能
例:
集合的使用
list list= new ArrayList<>();
list.add(“Str”)
泛型类
//泛型类型必须是引用类型
public class 类名 <泛型类型,...> {
T:任意类型 type
E:集合中元素的类型 element
K:key-value形式 key
V: key-value形式 value
}
例:
public class TestGenericity <T> {
private T name;
public TestGenericity(T name) {
this.name = name;
}
public T getName() {
return name;
}
public void setName(T name) {
this.name = name;
}
}
泛型接口
public <泛型类型> 返回类型 方法名(泛型类型 变量名) {
}
接口:
public interface TestGenericityInterface<T>{
public void showValue(T value);
}
实现1:
public class TestGenericityClassIInteger implements TestGenericityInterface <Integer>{
@Override
public void showValue(Integer value) {
System.out.println(value);
}
}
实现二:
public class TestGenericityClassString implements TestGenericityInterface <String>{
@Override
public void showValue(String value) {
}
}
泛型方法
public <代表泛型的变量 返回类型 方法名(参数) {
}
public <T> T testGenercityMethod1(T t){
System.out.println(t.getClass());
System.out.println(t);
return t;
}
实例
使用rpc分页接口实现递归回调
1:定义rpc分页接口定义泛型参数与返回
2:rpc接口继承基础分页接口
此接口为正常rpc接口提供 对应业务功能
3:rpc接口的实现实现分页查询
此接口模拟一次分页返回
4:定义回调接口
5:定义递归分页查询 查询到的数据调用回调接口
6:定义test方法 调用递归分页查询