泛型的使用
泛型类
通过泛型类限定类中参数的类型,最经典的就是List,Set,Map了,定义了泛型,传入的参数只能是定义的类型
//限定了ArrayList的参数只能是String类型,后面的<>可写可不写
ArrayList<String> a = new ArrayList<>();
a.add("啊啊");
public class test1 {
public static void main(String[] args) {
//实例化了一个自定义泛型类对象
testClass<String> aa =new testClass<>();
String bb = aa.method1("只能传入一个String类型");
}
}
//此处T可以随便写为任意标识,常见的如T、E、K、V等形式的参数常用于表示泛型
//在实例化泛型类时,必须指定T的具体类型
class testClass <T>{
//定义一个泛型方法,返回值类型为T,T的类型由外部指定,参数类型也是T
T method1(T num){
return num;
}
}
自定义泛型类可以传入多个泛型,用逗号隔开:
使用时不传入泛型类型,默认是Object任意类型
泛型接口
和泛型类基本一样
public class test1 {
public static void main(String[] args) {
//实例化了一个自定义泛型类对象
testClass<String> aa =new testClass<>();
String bb = aa.method1("只能传入一个String类型");
int cc = aa.next(123);//接口实现时泛型限定的是Integer类型,重写接口的方法,用的就是接口里面的类型
}
}
//实现接口时指明类型,也可以不指明,默认Object
class testClass <T> implements testInterface<Integer>{
//定义一个泛型方法,返回值类型为T,T的类型由外部指定,参数类型也是T
T method1(T num){
return num;
}
//重写接口方法
@Override
public Integer next(Integer num) {
return num*10;
}
}
//定义一个泛型接口
interface testInterface<K> {
public K next(K num);
}
泛型方法
public class test1 {
public static void main(String[] args) {
String aa = testMethod(new testClass<String>(),"参数");
System.out.println(aa);
}
//定义一个泛型方法,返回类型由外部决定,传入传输是一个自定义类的泛型对象对象
//返回值最好和传入参数一致
public static <S> S testMethod(testClass<S> ts,String a){
//返回类型强转成S,有风险,不建议这么写,这里只是测试
return (S)ts.method1((S)a);
}
}