泛型的使用
泛型类
通过泛型类限定类中参数的类型,最经典的就是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的类型由外部指定,参数类型也是TT 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类型,重写接口的方法,用的就是接口里面的类型}}//实现接口时指明类型,也可以不指明,默认Objectclass testClass <T> implements testInterface<Integer>{//定义一个泛型方法,返回值类型为T,T的类型由外部指定,参数类型也是TT method1(T num){return num;}//重写接口方法@Overridepublic 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);}}
