簡體   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