黑马程序员--泛型

来源:互联网 发布:项羽举鼎是真的吗 知乎 编辑:程序博客网 时间:2024/06/17 20:45


----------   android培训java培训、期待与您交流! ----------

泛型也是jdk1.5的新特性,它是模仿C++的泛型产生的,它的出现实现了一份代码可以被多种不同类型的对象重用,并且是代码简单,安全.

泛型只在编译时期有效,通过泛型,编译器可以过滤一些不符合泛型的类型,jvm在执行程序的时候,会去掉泛型,


泛型好处

        泛型的主要好处就是让编译器保留参数的类型信息,执行类型检查,执行类型转换操作,编译器保证了这些类型转换的绝对无误。

/******* 不使用泛型类型 *******/  List list1 = new ArrayList();  list1.add(0); /编译器不检查值  String str1 = (String)list1.get(0); //需手动强制转换,如转换类型与原数据类型不一致将抛出ClassCastException异常    /******* 使用泛型类型 *******/  List<String> list2 = new ArrayList<String>();  list2.add("value");//[类型安全的写入数据] 编译器检查该值,该值必须是String类型才能通过编译  String str2 = list2.get(0); //[类型安全的读取数据] 不需要手动转换  

泛型中的? 通配符(可以是任意类型)
             1. 使用?通配符可以引用其他各种参数化的类型,?通配符定义的变量主要用作引用,可以调用
            与参数化无关的方法,不能调用与参数化有关的方法
             2.限定通配符的上边界  extends
               限定通配符的下边界  extends
               限定通配符总是包含自己   (包含自己和自己的子类)
       注意:在对泛型类型进行参数化时,类型参数的实例必须是引用类型,不能是基本类型。
             当一个变量被声明为泛型时,只能被实例变量和方法调用(还有内嵌类型),而不能被静态变量和静态方法调用。应为静态成员是被所有参数化的类所共享的,所以静态成员不应该有类级别的类型参数。

泛型类

什么时候定义泛型类?
当类中要操作的引用数据类型不确定的时候
早期定义Object来完成扩展
现在定义泛型来完成扩展

代码实现入下:

class Utils<QQ>{private QQ q;public void setObject(QQ q){this.q = q;}public QQ getObject(){return q;}}class GenericDemo2 {public static void main(String[] args) {Utils<Worker> u = new Utils<Worker>();u.setObject(new Student());Worker w = u.getObject();/*Tool t = new Tool();t.setObject(new Student());Worker w = (Worker)t.getObject();*/}}






0 0