设为首页 加入收藏

TOP

Java泛型实例详解(一)
2018-06-09 10:07:59 】 浏览:481
Tags:Java 实例 详解

泛型


  泛型是JDK5.0增加的新特性,泛型的本质是参数化类型,即所操作的数据类型被指定为一个参数。这种类型参数可以在类、接口、和方法的创建中,分别被称为泛型类、泛型接口、泛型方法。


一、认识泛型


  在没有泛型之前,通过对类型Object的引用来实现参数的"任意化",但"任意化"带来的缺点是需要显示的强制类型转换,此种转换要求开发者对实际参数类型预知的情况下进行,对于强制转换错误的情况,编译器可能不会提示错误,但在运行时会出现异常,这是一个安全隐患。


  举例:不使用泛型实现参数化类型


package generic;


public class NoGeneric {
    private Object ob;    //定义通用类型成员
    public NoGeneric(Object ob) {
        this.ob = ob;
    }
    public Object getOb() {
        return ob;
    }
    public void setOb(Object ob) {
        this.ob = ob;
    }
    public void showType() {
        System.out.println("实际类型是:"+ob.getClass().getName());
    }
}


package generic;


public class NoGenericDemo {


    public static void main(String[] args) {
        // TODO 自动生成的方法存根
        //定义类NoGener的一个Integer版本
        NoGeneric intob = new NoGeneric(new Integer(66));
        intob.showType();
        int i = (Integer)intob.getOb();
        System.out.println("value="+ i);
        System.out.println("-----------------------------");
        //定义类NoGeneric的一个String版本
        NoGeneric strob = new NoGeneric(new String("hello"));
        strob.showType();
        String s = (String)strob.getOb();
        System.out.println("value="+ s);
    }
}


   执行结果为:


实际类型是:java.lang.Integer
value=66
-----------------------------
实际类型是:java.lang.String
value=hello


   上面的实例有两点需要注意:首先如下语句


String s = (String)strob.getOb();


  在使用时必须明确指定返回对象需要被强制转化的类型为String,否则无法编译通过;其次,由于intob和strob都属于NoGeneric的类型,假如执行如下语句


intob = strob;


  此种赋值,语法上是合法的,而在语义上是错误的,对于这种情况,只有在运行时才会出现异常,使用泛型就不会出现上述错误,泛型的好处就是在编译期 检查类型,捕捉类型不匹配错误,并且所有强制转换都是自动和隐式的,提高代码的重用率.


  举例 2:使用泛型使用泛型实现参数实例化类型


package generic;


public class Generic<T> {
    private T ob; //定义泛型成员变量
    public Generic(T ob) {
        this.ob = ob;
    }
    public T getOb() {
        return ob;
    }
    public void setOb(T ob) {
        this.ob = ob;
    }
    public void showType() {
        System.out.println("实例类型为:" + ob.getClass().getName());
    }
}


package generic;


public class GenericDemo {


    public static void main(String[] args) {
        // TODO 自动生成的方法存根
        //定义泛型Generic的一个Integer的版本
        Generic<Integer> intob = new Generic<Integer>(88);
        intob.showType();
        int i = intob.getOb();
        System.out.println("value=" + i);
        System.out.println("----------------------");
        //定义泛型Generic的一个String版本
        Generic<String> strob = new Generic<String>("hello");
        strob

首页 上一页 1 2 3 4 下一页 尾页 1/4/4
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Python 3 中的json模块使用 下一篇Python字符串方法大全

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目