Rumah  >  Artikel  >  Java  >  Bagaimanakah Anda Boleh Menentukan Kelas Jenis Generik pada Masa Jalan?

Bagaimanakah Anda Boleh Menentukan Kelas Jenis Generik pada Masa Jalan?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-19 02:12:02462semak imbas

How Can You Determine the Class of a Generic Type at Runtime?

Menentukan Kelas Jenis Generik

Dalam bidang pengaturcaraan generik, adalah penting untuk memastikan kelas jenis generik sedang dimanfaatkan. Walau bagaimanapun, seperti sifat generik, maklumat jenis biasanya dipadamkan pada masa jalan, memberikan cabaran untuk mendapatkannya kemudian.

Contoh:

Pertimbangkan generik berikut kelas:

public class MyGenericClass<T> {
  public void doSomething() {
    // ...
    T bean = (T)someObject.create(T.class);
    // ...
  }
}

Dalam contoh di atas, kami cuba mencipta contoh kelas T dengan menghantar literal kelas. Walau bagaimanapun, ini akan menyebabkan ralat "Tersurat kelas tidak sah untuk parameter jenis T", kerana percubaan menggunakan jenis generik sebagai literal kelas adalah dilarang.

Penyelesaian:

Untuk mengatasi cabaran ini, penyelesaian yang berdaya maju melibatkan pemindahan kelas jenis generik sebagai parameter kepada kaedah statik. Kaedah ini kemudiannya akan menggunakan API pantulan untuk membuat instantiate jenis generik.

public class MyGenericClass<T> {

    private final Class<T> clazz;

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

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

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

Dengan mengikuti pendekatan ini, kami memintas sekatan terhadap penggunaan jenis generik sebagai literal kelas, memastikan maklumat jenis yang diperlukan tersedia pada masa jalan . Walaupun ia mungkin penyelesaian yang tidak elegan, ia menyediakan cara untuk menentukan kelas jenis generik dalam konteks yang mencabar seperti yang ditunjukkan dalam contoh asal.

Atas ialah kandungan terperinci Bagaimanakah Anda Boleh Menentukan Kelas Jenis Generik pada Masa Jalan?. 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