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

时间:2015-10-20 15:27:49

标签: java generics 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
  }
}

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

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

2 个答案:

答案 0 :(得分:2)

取消<T>关闭类声明,这就是你不能使用它的原因。这应该有效:

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

答案 1 :(得分:0)

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

分析,更多关于创建此问题的配置是什么,如果我找到了什么,那么我将在我的回答中发布。