zoukankan      html  css  js  c++  java
  • 泛型(一)

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

    在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);
        }
    }

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

  • 相关阅读:
    cygwin补充安装gcc/g++的方法
    JS中获取request的值,非常好用的JS代码
    登录页面跳出框架的JS
    asp.net DataTable转JSON
    ASP.NET文件下载的实用方法
    史上最牛X到的身份证号码验证,测试误差为0
    nopcommerce插件深度剖析
    C# foreach,linq,delegate集合查询的性能比较
    jquery tab插件精简版
    建议博客园成立中国的开源项目组织,同意的顶起
  • 原文地址:https://www.cnblogs.com/Shevo/p/8476334.html
Copyright © 2011-2022 走看看