Java 你能做什么’;与泛型类型无关

Java 你能做什么’;与泛型类型无关,java,generics,Java,Generics,我在查看Java泛型时发现了以下限制:- 创建该静态类型的数组。这是最烦人的,但它是有道理的 因为您将创建一个对象数组 调用instanceof。这是不允许的,因为在运行时List和 List由于类型擦除,Java看起来也一样。 但是下面的代码编译得很好 interface Shippable<T> { void ship(T t); } class ShippableAbstractCrate<H> implements Shippable<H> {

我在查看Java泛型时发现了以下限制:-

  • 创建该静态类型的数组。这是最烦人的,但它是有道理的 因为您将创建一个对象数组
  • 调用
    instanceof
    。这是不允许的,因为在运行时
    List
    List
    由于类型擦除,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 
        }
      }
    }
    
    接口可交付{
    无效船舶(T);
    }
    类ShippableStructCrate实现可装运{
    公共无效船舶(HT){
    if(对象的t实例){
    //做点什么
    }
    }
    }
    
  • 3.创建一个静态变量作为泛型类型参数。这是不允许的,因为 类型链接到类的实例

    请举例说明。 我在问为什么这三点都是泛型的限制

  • 意思是你不会写

    if(t instanceof H)
    
    如果(对象的t实例)

  • 意味着您不能在
    ShippableAbstractCrate
    类中定义以下静态变量:

    static H someName;
    

  • 你的问题到底是什么?我在问为什么所有3点都是泛型的限制?真的为什么?答案是,“因为在运行时,泛型类型信息被擦除”。正如任何3秒钟的谷歌搜索都会告诉你的那样。不,我找不到我的答案,2不是(也?)像
    H instanceof String
    ?@CarlosHeuberger
    instanceof
    的第一个操作数无论如何都不能是一个类型,因此
    H instanceof String
    会因不同的原因失败,与泛型无关(就像
    Integer instanceof String
    会失败一样,除非你在作用域中有一个名为
    Integer
    的变量)。但这不是确切的意思吗,因为提到
    List
    在运行时看起来与
    List
    相同吗?还是应该是
    t instanceof List
    不可能?