首页 > 编程语言 > 详细

Java从入门到精通10-泛型

时间:2015-10-12 20:42:47      阅读:180      评论:0      收藏:0      [点我收藏+]

泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口、泛型方法。

java语言引入泛型的好处就是安全简单。

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

泛型的好处是在编译的时候检查类型安全,并且所有的强制转换都是自动和隐式的,提高代码的重用率。

public class Test {
    public static void main(String args[]) {
        ArrayList<Dog> al = new ArrayList<Dog>();
        Dog dog1 = new Dog();
        al.add(dog1);
        //Dog temp = (Dog) al.get(0);//强制转换
        //Cat temp=(Cat)al.get(0);//无误,但在编译发生类型错误
        Dog temp=al.get(0);
    }
}
class Cat{
    private String color;
    private int age;

    public String getColor() {
        return color;
    }

    public void setColor(String color) {
        this.color = color;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}
class Dog {
    private String name;
    private int age;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

java的反射机制源码

import java.lang.reflect.Method;

public class Test {
    public static void main(String args[]) {
        /*Gen<String> gen1=new Gen<String>("aaa");
        gen1.showTypeName();
        Gen<Integer> gen2=new Gen<Integer>(1);
        gen2.showTypeName();*/

        Gen<Bird> genBird=new Gen<Bird>(new Bird());
        genBird.showTypeName();
    }
}

class Bird{
    public void test1(){
        System.out.println("aa");
    }
    public void count(int a,int b){
        System.out.println(a+b);
    }
}

class Gen<T>{
    private T o;
    public Gen(T a){
        o=a;
    }
    public void showTypeName(){
        System.out.println("类型是:"+o.getClass().getName());
        Method method[]=o.getClass().getDeclaredMethods();
        for (int i=0;i<method.length;i++) {
            System.out.println("成员方法:" + method[i].getName());
        }
    }
}

执行结果:

类型是:demo.com.Bird
成员方法:count
成员方法:test1

泛型的有点:
①类型安全;
②向后兼容;
③层次清晰;
④性能较高,用GJ(泛型java)编写的代码可以为java编译器和虚拟机带来更多的类型信息,这些信息对java程序做进一步优化提供条件。

Java从入门到精通10-泛型

原文:http://www.cnblogs.com/alphastudio/p/4872660.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!