Rumah >Java >javaTutorial >Bagaimana untuk Menentukan Kelas Jenis Generik di Jawa?

Bagaimana untuk Menentukan Kelas Jenis Generik di Jawa?

Patricia Arquette
Patricia Arquetteasal
2024-11-15 22:18:02231semak imbas

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

Menentukan Kelas Jenis Generik: Meneroka Alternatif

Dalam bidang pengaturcaraan generik, selalunya menjadi penting untuk menentukan kelas khusus jenis generik pada masa ini guna. Walau bagaimanapun, mekanisme pemadaman jenis generik Java menimbulkan cabaran kepada usaha ini.

Untuk menangani isu ini, mari kita teliti contoh yang meniru senario dunia sebenar:

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);
  }
}

Malangnya, kod di atas akan gagal dengan ralat "literal kelas haram untuk parameter jenis T". Ini adalah kerana maklumat jenis generik dipadamkan pada masa jalan, menjadikan penggunaan langsung kelas T adalah mustahil.

Jadi, bagaimanakah kita boleh mengatasi halangan ini? Penyelesaian muncul sebagai penyelesaian yang berdaya maju: memperkenalkan kaedah kilang statik yang menerima kelas yang diingini sebagai parameter.

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();
  }
}

Pendekatan ini membolehkan anda menentukan kelas generik secara eksplisit semasa penciptaan objek, dengan berkesan memintas pemadaman masa jalan isu. Walau bagaimanapun, ia datang dengan kelemahan: ia menambahkan beberapa kod boilerplate dan sedikit merumitkan API. Namun begitu, ia kekal sebagai penyelesaian yang berkesan apabila penentuan jenis kelas amat diperlukan.

Atas ialah kandungan terperinci Bagaimana untuk Menentukan Kelas Jenis Generik di Jawa?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn