问题: 在编译参数化类型之后,当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>
如何保留其参数化结构。
可能是我遗漏了一些非常基本的东西,请原谅并在这种情况下教育我。
答案 0 :(得分:2)
取消<T>
关闭类声明,这就是你不能使用它的原因。这应该有效:
public class GenericFeature<T>{
T object;
public void dosomething(){
// do something
}
}
答案 1 :(得分:0)
看起来没有问题,类型擦除。很抱歉误导,花了一些时间分析问题后,发现项目中存在一些maven配置问题,我的GenericFeature<T>
已定义。如果我将这个类移动到另一个项目,我可以保留该类型。
分析,更多关于创建此问题的配置是什么,如果我找到了什么,那么我将在我的回答中发布。