[英]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.