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!