繁体   English   中英

java代码编译中泛型类型擦除的澄清

[英]Clarification on Generic Type Erasure in java code compilation

问题:编译参数化类型后,当类被 jar 引用时,客户端被迫创建原始类型,因为编译器会进行类型擦除。

例如:

public class GenericFeature<T>{
  T object;
  public void dosomething(){
    // do something
  }
}

在另一个应用程序中编译并添加它作为依赖项后,用户无法使用参数化类型。

GenericFeature<Integer> intFeature = new GenericFeature<Integer>() // is erroring out saying GenericFeature is not parameterized type.

分析我确实读过关于编译中泛型的类型擦除,因为它指出我的示例参数化类型在编译后将如下所示。

public class GenericFeature{
  Object object;
  public void dosomething(){
    // do something
  }
}

问题:如果这就是类型擦除的发生方式,那么 Java 的内部对象(如Comparable<T>Class<T>保留其参数化构造。

可能是我遗漏了一些非常基本的东西,在这种情况下请原谅并教育我。

去掉类声明中的<T> ,这就是你不能使用它的原因。 这应该有效:

public class GenericFeature<T>{
  T object;
  public void dosomething(){
    // do something
  }
}

看起来没有问题,类型擦除。 抱歉误导,花了一些时间分析问题后,发现在定义我的GenericFeature<T>的项目中存在一些 maven 配置问题。 如果我将这个类移动到不同的项目,我可以保留该类型。

分析,更多关于创建这个问题的配置是什么,如果我找到了一些东西,那么我会在我的答案中发布它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM