`
no7beckham
  • 浏览: 94799 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

泛型知识点

    博客分类:
  • JAVA
 
阅读更多

1. 例如对于 Pair<T extends Comparable> 或者

    public static <T extends Object & Comparable<? super T>> T min(List<T> list),可以调用Class,Field, Method的getTypeParameters函数来获取泛型信息,而对于有继承关系的,例如 DateInternel extends Pair<Date>, 可以用Class对象的getGenericSuperclass或者getGenericInterfaces来获取泛型的类型。

2. 一般对泛型我们会讲到一个擦除问题。主要表现在子类显示覆盖父类某个方法后,会造成在子类中会出现两个参数类型不同的方法,一个是泛型类型擦除后的方法,而一个是子类中指定类型的方法,例如

public class DateInternel extends Pair<Date> {

    public Date getSecond() {
        return super.getSecond();
    }

    public void setSecond(Date second) {
        if(second.compareTo(getFirst())>=0)
            super.setSecond(second);
    }

}

当编译完成后,DateInternel类会从父类Pair继承到下面两个方法

    public Comparable getSecond() {...}

    public void setSecond(Comparable second) {...}

对于get函数,返回值是无法作为函数标识的,这样会有函数同名的错误,而对于set函数,会导致当对DateInternel实例对象调用setSecond(Date second)和setSecond(Comparable second)的结果完全不同,针对这种情况,编译器会产生两个桥接方法来处理。

  // Method descriptor #14 (Ljava/lang/Comparable;)V
  // Stack: 2, Locals: 2
  public bridge synthetic void setSecond(java.lang.Comparable arg0);
    0  aload_0 [this]
    1  aload_1 [arg0]
    2  checkcast java.util.Date [31]
    5  invokevirtual com.statestreet.sle.chris.corejava.generic.DateInternel.setSecond(java.util.Date) : void [15]
    8  return
      Line numbers:
        [pc: 0, line: 1]
 
  // Method descriptor #30 ()Ljava/lang/Comparable;
  // Stack: 1, Locals: 1
  public bridge synthetic java.lang.Comparable getSecond();
    0  aload_0 [this]
    1  invokevirtual com.statestreet.sle.chris.corejava.generic.DateInternel.getSecond() : java.util.Date [81]
    4  areturn
      Line numbers:
        [pc: 0, line: 1]

桥接代码的大概形式如上,保证了在子类实例函数调用的结果一致性。

bridge方法的解释:bridge method may be created by the compiler when extending a parameterized type whose methods have parameterized arguments.

Synthetic关键字的解释:A class member that does not appear in the source code must be marked using a Synthetic attribute." Also, "The Synthetic attribute was introduced in JDK release 1.1 to support nested classes and interfaces ." 

3.对于下面两个实例对象,他们的Class对象是同一对象。

        Pair<Date> datePair = new Pair<Date>();
        Pair<String> stringPair = new Pair<String>();

        datePair.getClass()==stringPair.getClass()

4.泛型不能用于catch block中,例如

   public <T> T handle(List<T> list) {

       try {

           ...

       } catch(T t) {...}

   }

    编译器会提示错误。

5.不能创建泛型数组,例如 Pair<Date> pairs = new Pair<Date>[10];

6.不能实例化泛型变量和获取泛型的类信息, 例如 new T() 或者 T.class

7.类中声明的泛型类型不能用于静态变量和静态方法,会有编译错误,例如

   public class Pair<T> {

       public static T t;

       public static Pair<T> getInstance() {...}

   }

8.泛型的继承规则,Employee和Manager是父类和子类,但是Pair<Employee>和Pair<Manager>没有任何关系。

 

 

 

分享到:
评论

相关推荐

    集合与泛型

    集合与泛型知识点的总结

    Java泛型x详细知识点思维导图.xmind

    Java泛型x详细知识点思维导图.xmind

    Java高级知识点详解系列

    Java高级知识点拆解,java内存,泛型,反射等,可以加V进行交流

    泛型笔记.pdf

    1;继承一个泛型类时,必须为其传递泛型参数 public class Father,V&gt; -------整个叫泛型 K,V ----泛型参数 2;定义子类时直接为父类泛型参数赋值 public class Son:Father,V&gt; public class Son:...知识点 B:

    C#控制台电话本小项目,存储txt记事本通信录项目

    C#控制台电话本小项目,存储txt记事本通信录项目,使用dictionary字典泛型知识点,实现添加,查询,修改,删除和退出等基本功能,代码简洁明了,可以直接运行,信息保存在txt记事本中,不是数据只存内存,后续关闭...

    java泛型简单明了.md

    对泛型的简单举例,通过例子了解泛型这个知识点

    Java泛型:概念、用法与优势

    Java泛型是一种强大的特性,它使得我们可以编写更加通用、类型安全的代码。通过使用泛型类、泛型方法以及通配符,...在实际开发中,合理利用泛型可以提高代码的可重用性和可维护性,是每个Java开发者应该掌握的知识点。

    JAVA核心知识点整理.zip

    java核心知识点整理,面试很有用 Java核心知识点2.JVM JVM 是可运行 Java 代码的假想计算机 ,包括一套字节码指令集、一组寄存器、一个栈、 一个垃圾回收,堆 和 一个存储方法域。JVM 是运行在操作系统之上的,它...

    java基础里泛型的一个小知识点

    这是我在网络上学习所收获到的一些心得,想和大家分享一下。如有侵权或者错误请大家私信我,我会进行删除与修改。

    链表+泛型+反射实现自定义的LinkedList集合类

    该资源利用基础的链表结构,结合泛型和反射的知识点,实现重写LinkedList集合类,可以存放任意类型数据。比较推荐对Java有稳固基础的同学来阅读,为了方便阅读,代码的注释写的非常的清楚

    java反射知识点

    我的代码里主要有一下知识点: 1.获取Class对象的三种方式 2.获取构造方法并调用 3.获取成员方法 4.获取成员变量 5.反射数组 6.通过反射配置文件内容 7.通过反射越过泛型检查 8.其他一些文本笔记 读者需要补充的知识...

    Java基础知识点总结.docx

    Java学习更是如此,知识点总结目录如下: 目录 一、 Java概述 3 二、 Java语法基础 5 数据类型 5 运算符号 14 语句 15 函数 15 方法重载(Overloadjing)与重写(Overriding) 16 数组 17 总结 18 三、 常见关键字 ...

    Java面向对象知识点梳理(思维导图)

    资源描述:Java面向对象知识点的思维导图 内容概要: 这个资源是一个Java面向对象知识点的思维导图,它涵盖了Java中面向对象编程的核心概念和重要知识点。导图中包含了类、对象、继承、多态、封装等基本概念,同时...

    java核心知识点整理

    java详细的知识点整理,包括:jvm原理、IO、类加载过程、集合、线程、反射、泛型等java基础,spring原理、特点,微服务架构、数据库引擎、消息组件、算法、数据结构等。偏理论的知识较多,主要用于面试。

    J2SE知识点总结(主要帮助初学者)

    包括基础语法、面向对象、异常处理、数组、常用类、容器、IO、反射、枚举类型与泛型、线程、网络、GUI等知识点总结和小例子,另外还附加了J2EE的Servlet、JSP、EL表达式、JSTL标签库、JavaBean的一些知识点,该文档...

    java高级知识点快速复习.zip

    集中的知识点,适用于已经学过之后,快速过一遍复习(临时抱佛脚),比如面试前复习一下。不适用于没学过这些知识点的或者完全不懂英文的。包括spring注解,maven,git,java集合,泛型,jdk8,jvm参数,正则表达式...

    尚硅谷-实验1:集合中使用泛型.pdf

    ·自Java语言起源始,循序渐进,知识点剖析细致且每章配备大量随堂练习,让你步步为营,学得透彻、练得明白 ·拒绝晦涩难懂的呆板教学,宋老师语言生动幽默,举例形象生动深入浅出,迅速让你把握问题本质,四两拨千...

    Java面向对象知识点的思维导图

    资源描述:Java面向对象知识点的思维导图 内容概要: 这个资源是一个Java面向对象知识点的思维导图,它涵盖了Java中面向对象编程的核心概念和重要知识点。导图中包含了类、对象、继承、多态、封装等基本概念,同时...

    C#高级编程xml wcf泛型

    C#高级编程包含集合,泛型,事务,xml,wcf通信等相关知识点

    C#初级中级学习代码 每个知识点都可以正常使用 C#详细源码

    初级中级C#程序员用到的知识点,C#基础源码,每个里面都有详细的解释,算是学习工作帮助很大的工具 资源内容:01委托的基本认识,02委托的基本应用,03委托的基本应用练习与总结,04_02自己写泛型委托,04_03Action泛型委托,...

Global site tag (gtag.js) - Google Analytics