泛不系舟

天行健,君子以自强不息;地势坤,君子以厚德载物。

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

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

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程序做进一步优化提供条件。

posted on 2015-10-12 19:54  惊蝴蝶  阅读(231)  评论(0编辑  收藏  举报