通用类型不能做什么

时间:2017-07-18 12:22:27

标签: java generics

我正在阅读Java Generics并发现以下限制: -

  1. 创建该静态类型的数组。这个是最烦人的,但它是有道理的 因为你要创建一个对象数组。
  2. 致电instanceof。这是不允许的,因为在运行时List<Integer>和 由于类型擦除,List<String>看起来与Java相同。 但是下面的代码编译得很好。

    interface Shippable<T> {
      void ship(T t);
    }
    class ShippableAbstractCrate<H> implements Shippable<H> {
      public void ship(H t) {
        if(t instanceof Object) {
          //do something 
        }
      }
    }
    
  3. 3.创建静态变量作为泛型类型参数。这是不允许的,因为 type链接到类的实例。

    请举例说明澄清。 我问为什么所有3点都是泛型的限制?

1 个答案:

答案 0 :(得分:1)

  1. 表示你不能写

    if(t instanceof H)
    

    您随时可以撰写if(t instanceof Object)

  2. 表示您无法在ShippableAbstractCrate类中定义以下静态变量:

    static H someName;