资讯中心 Info
当前位置:爱尚教育 > 资讯中心 >
泛型知多少
发布日期:2020-10-30 阅读次数:
1、什么是泛型?
        把类型明确的工作推迟到创建对象或调用方法的时候才去明确的特殊的类型
 
2、为什么要使用泛型?
public static void main(String[] args) {
        List list = new ArrayList();
 
        list.add("aaa");
        list.add("bbb");
        list.add(587);
        list.add('A');
 
        for (int i = 0; i < list.size(); i++) {
                String s = (String) list.get(i);
                System.out.println(s);
        }
 
}
        上述代码片段定义了一个List类型的集合,先向其中加入了两个字符串类型的值,随后加入一个Integer类型的值,再加入一个char类型的数据。这是完全允许的,因为此时list默认的类型为Object类型。在之后的循环中,由于忘记了之前在list中也加入了Integer类型的值或其他编码原因,很容易出现错误。因为编译阶段正常,而运行时会出现“java.lang.ClassCastException”异常。因此,导致此类错误编码过程中不易发现。
        此时,可以使用泛型集合解决这个问题,可以在定义集合的时候同时指定集合中元素的类型。
 
public static void main(String[] args) {
        List<String> list = new ArrayList<String>();
 
        list.add("aaa");
        list.add("587");
        list.add("A");
 
        for (int i = 0; i < list.size(); i++) {
                String s = list.get(i);
                System.out.println(s);
        }
 
}
        泛型集合可以规定集合中的数据类型,省去了装箱拆箱的过程,并保证了数据的准确性,减少程序出bug的可能性。
 
3、自定义泛型
        我们还可以自定义一个泛型类
public class Student<T> {
        private T name;
        private int age;
 
        public T getName() {
                return name;
        }
        public void setName(T name) {
                this.name = name;
        }
        public int getAge() {
                return age;
        }
        public void setAge(int age) {
                this.age = age;
        }
 
}
 
public static void main(String[] args) {
        Student<String> stu = new Student<String>();
        stu.setName("小李");
        stu.setAge(28);
        System.out.println(stu);
}
        此时Student是一个泛型类,name属性定义成泛型,当创建Student对象时,才指定name属性的类型,这就是泛型类和泛型属性
 
课程体系
通知公告