泛型

2018-09-24  本文已影响4人  uranusleon

泛型

wiki

What:泛型是什么?

泛型的使用

具体示例

package GenericsTest;

public class GenericsClass<T> {
    T var;

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

      if(ex_num instanceof Generic<Number>){   
      } 
      

泛型类的实现原理

package GenericsTest;

public class GenericsClass<T extends String> {
    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)

泛型的关键字

上一篇 下一篇

猜你喜欢

热点阅读