泛型

泛型

  • Why:为什么需要泛型
  • What:泛型是什么;
  • How:泛型怎么实现
  • When:泛型什么时候使用
  • Where:泛型在哪里使用
  • Other:使用泛型会带来什么问题?
    • 什么时候把类型传给类型形参

wiki

  • Java深度历险(五)——Java泛型
  • java 泛型详解-绝对是对泛型方法讲解最详细的,没有之一
  • https://nofluffjuststuff.com/magazine/2016/09/time_to_really_learn_generics_a_java_8_perspective

What:泛型是什么?

  • 泛型的定义

泛型的使用

  • 泛型类型用于类的定义中,被称为泛型类。通过泛型可以完成对一组类的操作对外开放相同的接口。最典型的就是各种容器类,如:List、Set、Map。

具体示例

package GenericsTest;

public class GenericsClass {
    T var;

    public GenericsClass(T t)
    {
        var = t;
    }
    public void doSomethins()
    {
        System.out.println(this.var);
    }
}
    1. 泛型的类型参数只能是类类型,不能是简单类型。
    1. 不能对确切的泛型类型使用instanceof操作。如下面的操作是非法的,编译时会出错。

      if(ex_num instanceof Generic){   
      } 
      

泛型类的实现原理

package GenericsTest;

public class GenericsClass {
    T var;

    public GenericsClass(T t)
    {
        var = t;
    }
    public void doSomethins()
    {
        System.out.println(this.var);
    }
}

编译代码

// Decompiled by Jad v1.5.8g. Copyright 2001 Pavel Kouznetsov.
// Jad home page: http://www.kpdus.com/jad.html
// Decompiler options: packimports(3) 
// Source File Name:   GenericsClass.java

package GenericsTest;

import java.io.PrintStream;

public class GenericsClass
{

    public GenericsClass(String s)
    {
        var = s;
    }

    public void doSomethins()
    {
        System.out.println(var);
    }

    String var;
}

从中可以看出泛型类是将类型参数转化为类型的上界,示例中转化为String,如果没有指定上界,则转化为Object

什么时候泛型形参变为实参

泛型的类型擦除(type erasure)

  • 使用类型时

泛型的关键字

你可能感兴趣的:(泛型)