首頁  >  文章  >  Java  >  Java中如何確定泛型類型的類別?

Java中如何確定泛型類型的類別?

Patricia Arquette
Patricia Arquette原創
2024-11-15 22:18:02138瀏覽

How to Determine the Class of a Generic Type in Java?

確定泛型類型的類別:探索替代方案

在泛型程式設計領域,確定當前泛型類型的特定類別通常變得至關重要使用。然而,Java 的泛型類型擦除機制對這項努力提出了挑戰。

為了解決這個問題,讓我們深入研究一個模擬現實世界場景的範例:

public class MyGenericClass<T> {
  public void doSomething() {
    // Imagine a 3rd party library call that expects a Class object
    T bean = (T) someObject.create(T.class);
  }
}

不幸的是,上面的程式碼將失敗並出現「型別參數T 的類文字非法”錯誤。這是因為泛型類型資訊在運行時被擦除,導致無法直接使用 T.class。

那麼,我們要如何克服這個障礙呢?一個可行的解決方案出現了:引入一個接受所需類別作為參數的靜態工廠方法。

public class MyGenericClass<T> {

  private final Class<T> clazz;

  public static <U> MyGenericClass<U> createMyGeneric(Class<U> clazz) {
    return new MyGenericClass<>(clazz);
  }

  private MyGenericClass(Class<T> clazz) {
    this.clazz = clazz;
  }

  public void doSomething() {
    T instance = clazz.newInstance();
  }
}

這種方法允許您在物件建立期間明確指定泛型類,從而有效地繞過運行時擦除問題。然而,它確實有一個缺點:它添加了一些樣板程式碼並使 API 稍微複雜化。儘管如此,當類別類型的確定必不可少時,它仍然是一種有效的解決方法。

以上是Java中如何確定泛型類型的類別?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn