Java泛型

Java泛型

在没有泛型的时候,集合中可以放入任意对象:

import java.util.ArrayList;
import java.util.List;

public class Test {
    public static void main(String[] args) {
        List list = new ArrayList();
        list.add("xxx");
        list.add(123);
    }
}

在取出时,必须进行类型强转:

String s = (String) list.get(0);
int i = (int) list.get(1);

有了泛型之后,取出时不用进行强转:

import java.util.ArrayList;
import java.util.List;

public class Test {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("xxx");
        String s = list.get(0);
    }
}

泛型只在编译期有效:

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;

public class Test {
    public static void main(String []args) throws ClassNotFoundException, NoSuchMethodException, InvocationTargetException, IllegalAccessException {

        List<Integer> list = new ArrayList<>();
        list.add(111);
        list.add(222);

        Class c = list.getClass();
        Method m = c.getMethod("add", Object.class);
        m.invoke(list,"Hello");
        
        System.out.println(list);
    }
}
  • 一个List集合插入两个Integer类型
  • 运行时通过反射再插入一个String类型
  • 没有报错,说明在运行时泛型不再起作用

泛型使用方法:

  • 泛型类和接口
  • 泛型方法

泛型类:

public class Test {
    public static void main(String[] args) {
        Test2<String> test2 = new Test2<>();
        test2.field = "xxx";
        System.out.println(test2.field);
    }
}

class Test2<T> {
    T field;
}

泛型方法:

public class Test {
    public static void main(String[] args) {
        System.out.println(method("xxx"));
    }

    static <T> T method(T var) {
        return var;
    }
}

使用泛型限定子类型:

public class Test {
    public static void main(String[] args) {
        method(new Test2());
        method(new Test3()); // 非Test的子类型,会报错
    }

    static <T extends Test> T method(T var) {
        return var;
    }
}

class Test2 extends Test {

}

class Test3 {
    
} 
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容