泛型

Posted shevo

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了泛型相关的知识,希望对你有一定的参考价值。

  面向对象的重要目标就是代码的重用,支持这一目标的一个重要机制就是泛型。如果除去对象的基本类型外实现的方法是相同的,那么我们就可以用泛型机制来描述这种基本的功能。

在1.5版本以前,Java并不直接支持泛型使用,泛型的实现是通过使用继承的概念实现的。

(一)

  使用Object表示泛型

public class Output {

    private Object storedValue;
    
    public void read(Object value){
        this.storedValue = value;
    }
    
    public void write(){
        System.out.println("storedValue为:" + storedValue);
    }
    
    public static void main(String[] args){
        Output o = new Output();
        o.read("46");
        o.write();
        o.read(37);;
        o.write();
    }
}

  基本类型的包装:

    我们知道基本类型是没有超类的,所以要想实现基本类型的泛型,就要用到他们的包装类,例如int的包装类是Integer,八个包装类都是不可变的,具体例子如下。

public static void main(String[] args){
        Output o = new Output();
        o.read(new Integer(37));
    }

  自动装箱/拆箱

    上图的代码相对有些麻烦,因为需要调用Integer对象,Java5以后有了自动装箱和拆箱功能。例如当一个int型要传递给一个需要Integer的地方,编译器会在幕后插入一个Integer的构造器,这叫自动装箱。当一个Integer类型要传递个一个需要int类型时,编译器会自动调用intValue方法,这叫自动拆箱。根据以上内容,上述代码可改成

public class Output {

    private Object storedValue;
    
    public void read(Object value){
        this.storedValue = value;
    }
    
    public Object write(){
        return storedValue;
    }
    
    public static void main(String[] args){
        Output o = new Output();
        o.read(37);//自动装箱
        int value = (Integer)o.write();//自动拆箱
        System.out.println("储存值为" + value);
    }
}

以上就是采用继承实现泛型的方法,但这种方法有许多限制,接下来会讲解使用接口类型表示泛型和数组类型的兼容性。

以上是关于泛型的主要内容,如果未能解决你的问题,请参考以下文章

作业09-集合与泛型

Java泛型:类型擦除

201621044079 韩烨作业09-集合与泛型

201621123062《java程序设计》第九周作业总结

什么意思 在HashMap之前 ? Java中的泛型[重复]

201621123037 《Java程序设计》第9周学习总结