`
no7beckham
  • 浏览: 97210 次
  • 性别: 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 1.5及之后的版本中,引入了泛型这一特性,旨在提高集合类使用的安全性与灵活性。主要解决的问题包括: - **元素存储的安全性问题**:在非泛型...

    泛型约束知识点练习及参考答案

    泛型约束知识点练习及参考答案

    day02_Collection、泛型每日作业卷2

    【知识点详解】 1. **集合框架**:Java 集合框架是一组接口...以上是对给定作业题目中涉及的Java Collection框架和泛型知识点的详细说明。通过理解和应用这些概念,可以有效地处理各种数据结构和操作,提高编程效率。

    泛型知识总结

    本文将深入探讨泛型的应用、原理、协变与逆变以及泛型缓存等核心知识点。 首先,让我们理解泛型的基本概念。泛型允许我们在类、接口和方法中使用类型参数,这样在编译时就能检查类型安全,避免了运行时的类型转换...

    关于java基础的泛型的练习

    下面将详细解释Java泛型的基本概念、使用方式以及相关的知识点。 1. 泛型的基本概念: - 泛型是一种参数化类型,允许在定义类、接口和方法时使用类型参数,从而创建一种可以适用于多种类型的通用代码。 - 泛型的...

    java泛型指南 经典

    ### Java泛型指南经典知识点解析 #### 一、引言 Java 1.5 版本引入了一系列重要的语言特性,其中“泛型”是其中一项关键特性。泛型的引入极大地提高了 Java 语言的类型安全性和代码重用性。本文档旨在深入探讨 ...

    黑马程序员----泛型学习注意点

    下面将详细阐述泛型的主要知识点: 1. 泛型的基本概念: 泛型是Java SE 5.0引入的新特性,主要用于集合框架,它可以限制容器中存储的数据类型,确保在编译时就能检测出错误,而不是等到运行时。泛型使用尖括号`&lt;&gt;`...

    Java高级知识点详解系列

    "Java高级知识点详解系列"聚焦于几个核心领域:Java内存管理、泛型以及反射。这些概念在实际开发中至关重要,理解它们能够帮助开发者写出更高效、更灵活且更易于维护的代码。 1. **Java内存**:Java内存主要涉及堆...

    泛型类型转换Demo

    下面我们将深入探讨"泛型类型转换Demo"中的关键知识点。 1. **泛型的基本概念**: 泛型是Java SE 5.0引入的新特性,它允许在类、接口和方法声明中使用类型参数。通过泛型,我们可以创建可以操作多种数据类型的通用...

    泛型工具类

    #### 核心知识点解析:泛型工具类 标题提到的“泛型工具类”主要指的是一种设计模式或编程实践,它提供了一系列用于处理泛型类型的工具方法。这类工具类通常用于辅助其他类或框架(如DAO层)更高效地操作泛型数据。...

    java 泛型接口示例

    下面我们将详细探讨Java泛型接口的相关知识点。 1. **泛型接口的定义** 泛型接口的定义方式与普通接口类似,只是在接口名之后添加了尖括号`&lt;T&gt;`,其中`T`是一个类型参数,代表某种未知的数据类型。例如: ```java...

    Webservice传递泛型的案例,包括web服务端和mobile端

    总结起来,这个案例涵盖了以下知识点: 1. 泛型的概念和C#中的泛型使用。 2. Web服务(ASMX或WCF)的基本原理和泛型对象的序列化与反序列化。 3. 移动端如何与Web服务通信,包括泛型对象的序列化和反序列化。 4. 在...

    C#泛型集合使用实例

    下面将详细探讨C#泛型集合的使用及其相关知识点。 1. **泛型接口与类** C#中的泛型接口如`IEnumerable&lt;T&gt;`和泛型类如`List&lt;T&gt;`、`Dictionary, TValue&gt;`是泛型集合的基础。这些接口和类定义了操作数据的一般方法,...

Global site tag (gtag.js) - Google Analytics