`
zhenzxie
  • 浏览: 68201 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

Java学习记录

    博客分类:
  • Code
阅读更多

以下是我看Java核心技术卷一中泛型程序设计一章摘抄下来的。

 

2011--10-31


(一)泛型的局限性:
 ①:不能用基本数据类型实例化类型参数 eg.ArrayList<int>  ---> 被转化为 ArrayList<Integer>
  ②:运行是类型查询只使用于原始数据类型 eg.if(a instanceof Pair<String>) 和 if(a instanceof Pair<T>) 返回是一样的
     --无论何时使用instance 或涉及泛型类型的强制类型转换表达式都会看到编译器警告。
     --getClass方法总是返回原始类型 eg. 对于Pair<String> p1 = … 和 Pair<Integer> p2 = … 有
        if(p1.getClass() == p2.getClass()) 返回true.
  ③:不能抛出也不能捕获泛型类实例
  ④:参数化类型的数组不合法 eg. Pair<String>[] table = new Pair<String>[10] //error
  ⑤:不能实例化类型变量 T t = new T() // error new T[]; //error T t = T.class.newInatance(); //error
   解决方法:设计这样的API
       public static <T> Pair<T> makePair(Class <T> cl){
            try{
               return new Pair<T>(cl.newInstance,cl.newInstance);}catch(Exception e){return null;}
       }
     然后就可以这样调用:Pari<String> p = Pair.makePair(String.class);
  ⑥:泛型类的静态上下文中的类型变量无效 eg. public static T get(); // error 即使类上面有T   改为 public static
<T> T get();


(二)泛型中的通配符类型
  ①:Pair< ? extends Employee>   eg. public static void print(Pair<? extends Employee>);  这样的一个方法参数可以是
                 Pair<Employee> 或者 Pair<Manager> //Manager 是 Employee 的子类。
  ②:? extends Employee get(); 是正确的,而void set(? extends Employee) 是错误的


(三)泛型中的通配符超类型限定
  ①:? super Employee  即 ? 是继承Employee
  ②:? super Employee get(); 是错误的,返回类型不能保证,只能赋给 Object ,而void set(? extends Employee) 是正确的.
  ③:? 不是类型变量,eg. ? t = p.get() //error. 但是可以使用通配符捕获
      public static <T> void swap( Pair<?> p){
         swapHelper(p);
      }
      public static <T> void swapHelper(Pair<T> p){
         T t = p.getFirst();
         p.setFirst(p.getSecond());
         p.setSecond(t);
      }
      swapHelper()方法中的参数T捕获了通配符。

 

参考 java核心技术卷一泛型程序设计

0
1
分享到:
评论

相关推荐

    Java 学习笔记Java学习笔记

    Java是一种广泛使用的面向对象的编程语言,由Sun Microsystems(现为Oracle公司的一部分)于1995年发布。...Java学习笔记涵盖了这些核心知识点,通过深入学习和实践,你可以逐步掌握Java编程,并应用于实际项目开发中。

    java学习笔记1

    Java学习笔记1是学习Java过程中的笔记,主要记录了Eclipse开发环境中的快捷键使用、编辑功能、查找和调试等知识点。 Eclipse快捷键 Eclipse中有许多快捷键,掌握这些快捷键可以大大提高开发效率。下面列举了一些...

    Java学习笔记——良葛格

    "Java学习笔记——良葛格"是一份专为初学者设计的教程资料,由良葛格精心编写,旨在帮助读者掌握JDK5.0版本的Java基础知识。JDK(Java Development Kit)是Java开发的核心工具集,包含了编译器、调试器和运行环境等...

    (完整版)最全的java学习笔记(必看).pdf

    Java学习笔记 Java是一种流行的编程语言,广泛应用于Android应用程序开发、Web应用程序开发、桌面应用程序开发等领域。以下是Java学习笔记的摘要信息: 一、Java技术基础 * 1.1 编程语言:Java是一种面向对象的...

    Java学习笔记学习笔记

    Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习...

    JAVA学习笔记 林信良

    《JAVA学习笔记》是林信良先生的一部深入浅出的Java编程教程,旨在帮助初学者和有一定经验的开发者巩固和提升Java编程技能。这本书涵盖了Java语言的基础到高级概念,是一份宝贵的自学资料。 首先,从基础部分开始,...

    韩顺平编写的java学习笔记(全)

    ### 韩顺平编写的Java学习笔记概览 #### Java平台分类与运行机制 - **J2SE(Java 2 Platform, Standard Edition)**: 标准版Java开发平台,适用于桌面应用程序开发。 - **J2EE(Java 2 Platform, Enterprise ...

    Java学习笔记(必看经典).pdf

    本知识点的标题为“Java学习笔记(必看经典)”,意味着所整理的内容是针对Java初学者的一系列核心概念和原理的总结。 首先,面向对象编程是Java语言的核心,它与传统的面向过程编程有显著的不同。面向对象编程强调的...

    java学习笔记.zip

    java学习笔记java学习笔记.zipjava学习笔记.zipjava学习笔记.zipjava学习笔记.zipjava学习笔记.zipjava学习笔记.zipjava学习笔记.zipjava学习笔记.zipjava学习笔记.zipjava学习笔记.zipjava学习笔记.zipjava学习笔记...

    java学习笔记(全)

    Java学习笔记全集是针对Java编程语言的一份详尽的学习资料,它涵盖了从基础到进阶的各个层面,旨在帮助初学者系统地学习Java,并为有一定经验的开发者提供复习和巩固知识的平台。这份笔记主要关注Java语言的核心概念...

    Java学习笔记(必看经典).doc

    这份“Java学习笔记(必看经典).doc”文档将涵盖Java的核心概念和重要知识点,对于初学者和有经验的开发者来说都是宝贵的参考资料。 首先,Java的基础部分通常包括以下几个方面: 1. **Java语法基础**:这是所有...

    《Java学习笔记》

    这份《Java学习笔记》包含了丰富的知识内容,旨在帮助学习者全面掌握Java编程技术。笔记分为7个PDF部分,覆盖了从基础到高级的Java编程概念。 1. **Java基础知识**:这部分内容通常包括Java的历史背景、环境配置、...

    java学习笔记.pdf

    "Java学习笔记" 本资源是一个关于Java编程语言的学习笔记,涵盖了Java的基础知识、语法、数据类型、变量、类型转换等方面的内容。 标题:"java学习笔记.pdf" 描述:"想自学的小伙伴可以看俺" 标签:"Java" 部分...

    Java学习笔记及心得

    ### Java学习笔记及心得知识点详细解析 #### 标题:Java学习笔记及心得 #### 描述:Core Java 学习笔记及心得 pdf格式可打开。涵盖了java的基础入门知识,非常适合自学的及想深入学习理解的同学。 #### 标签:...

    Java学习笔记PPT

    这份"Java学习笔记PPT"是针对Java2版本的学习资源,旨在帮助初学者或有一定基础的开发者深入理解Java的核心概念和应用。 在Java学习的初期,掌握基本语法是至关重要的。Java的语法与C++有诸多相似之处,但更加强调...

    瑜琅java学习笔记

    ### 瑜琅Java学习笔记概览 瑜琅的Java学习笔记涵盖了Java的基础概念与核心特性,从起源到高级特性均有涉及。以下是对该学习笔记各部分的深入解析: #### 1. Java起源 ##### 1.1 发展背景 - Java的诞生源于Sun ...

    良葛格JAVA学习笔记

    【标题】"良葛格JAVA学习笔记"是一个专注于Java编程的学习资源,由知名教育者或博主"良葛格"编撰。这份学习笔记以其清晰易懂的讲解方式和详尽的内容,深受学习者喜爱,被强烈推荐。它旨在帮助初学者和有一定基础的...

    java学习笔记.doc

    Java 学习笔记 本资源摘要信息涵盖了 Java 编程语言的基础知识,着重于面向对象编程(OOP)的概念和实现。下面是该资源的详细知识点: 1. 面向对象编程(OOP)的基本概念: * 对象: everything is an object...

Global site tag (gtag.js) - Google Analytics