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