美文网首页
泛型如何理解与示例代码

泛型如何理解与示例代码

作者: c4a1d989518e | 来源:发表于2017-06-21 22:29 被阅读24次

    先上段代码

    List list = new ArrayList();
        list.add("shiyanlou");
        list.add("admin");
        list.add(100);
    
        for (int i = 0; i < list.size(); i++) {
             String name = (String) list.get(i); // 1
             System.out.println("name:" + name);
        }
    

    在上述代码中,定义了一个List类型的集合,先向其中加入了两个字符串类型的值,随后加入一个Integer类型的值。这是完全允许的,因为此时list默认的类型为Object类型。在之后的循环中,由于忘记了之前在list中也加入了Integer类型的值或其他编码原因,很容易出现错误。因为编译阶段正常,而运行时会出现“java.lang.ClassCastException”异常。因此,导致此类错误编码过程中不易发现。
    这时候就需要加个约束。什么是泛型?泛型,即“参数化类型”。
    而泛型就帮我们提供了类型参数,让我们提取规定好集合对象的类型。
    示例:先新建两个类。

    public class Animal {
        public Animal(){
            System.out.println("我是动物");
        }
    }
    
    public class Dog extends Animal {
        public Dog(){
            System.out.println("我是狗");
        }
    }
    

    新建类,添加如下示例代码

    public class Test {
    
    /*
    注意:定义带类型参数的方法,其主要目的是为了表达多个参数以及返回值之间的关系。例如本例子中T和S的继承关系, 返回值的类型和第一个类型参数的值相同。
    */
    
        public<T, S extends T> T testDemo(T t, S s){
            System.out.println("我是 T 类型,我的类型是" + t.getClass().getName());
            System.out.println("我是 S 类型,我的类型是" + s.getClass().getName());
            return t;
        }
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            Test test = new Test();
            Dog d = new Dog();
            Animal a0 = new Animal();
            Animal a1  = test.testDemo(a0, d);
            System.out.println("我是整数 a,我的类型是" + a1.getClass().getName());
        }
    
    }
    

    运行结果为:



    泛型中的<>内容,也可以用通配符。比如下面示例中的?号。

    import java.util.List;
    
    public class Test {
    
        public void testDemo(List<?> s){
            for(Object obj:s){
                System.out.println("我的类型是" + obj.getClass().getName());
            }
        }
    
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            Test test = new Test();
            Dog a0 = new Dog();
            Animal a1 = new Animal();
            List<Animal> s = new ArrayList<Animal>();
            s.add(a0);
            s.add(a1);
            test.testDemo(s);
        }
    
    }
    

    运行结果为


    文章整理自:
    实验楼泛型
    Java总结篇系列:Java泛型

    相关文章

      网友评论

          本文标题:泛型如何理解与示例代码

          本文链接:https://www.haomeiwen.com/subject/grxxcxtx.html