Apakah ada cara untuk membuat turunan dari kelas tertentu yang diberi nama kelas (dinamis) dan meneruskan parameter ke konstruktornya.
Sesuatu seperti:
Object object = createInstance("mypackage.MyClass","MyAttributeValue");
Di mana "MyAttributeValue"
argumen untuk konstruktor MyClass
.
java
reflection
instantiation
TheLameProgrammer
sumber
sumber
newInstance()
adalah metode varargs (sama sepertiGetConstructor()
), tidak perlu untukObject
penciptaan -array eksplisit .Object[]
argumen, saya lebih suka membuat array secara eksplisit dalam kasus ini.Anda dapat menggunakan
Class.forName()
untuk mendapatkanClass
objek dari kelas yang diinginkan.Kemudian gunakan
getConstructor()
untuk menemukanConstructor
objek yang diinginkan .Akhirnya, panggil
newInstance()
objek itu untuk mendapatkan contoh baru Anda.sumber
Anda dapat menggunakan refleksi
sumber
Class.forName(className).getConstructor().newInstance();
;)Jika kelas hanya memiliki satu konstruktor kosong (seperti Activity atau Fragment dll, kelas android):
sumber
Constructor<?> ctor = clazz.getConstructor(String.class)
sepertinya tidak bekerja untuk saya.saat menggunakan (yaitu)
getConstructor(String.lang)
, konstruktor harus dinyatakan publik. Kalau tidakNoSuchMethodException
dilemparkan a.jika Anda ingin mengakses konstruktor non-publik, Anda harus menggunakan (yaitu)
getDeclaredConstructor(String.lang)
.sumber
Anda ingin menggunakan java.lang.reflect.Constructor.newInstance (Object ...)
sumber
Cara yang sangat sederhana untuk membuat objek menggunakan Java
Class<?>
dengan argumen konstruktor yang lewat:Kasus 1: - Di sini, adalah kode kecil di
Main
kelas ini :Dan, inilah
Base
struktur kelasnya:Kasus 2: - Anda, dapat mengkode yang sama untuk konstruktor dengan beberapa argumen dan menyalin konstruktor. Misalnya, meneruskan 3 argumen sebagai parameter ke
Base
konstruktor akan memerlukan konstruktor yang akan dibuat di kelas dan perubahan kode di atas sebagai:Dan di sini kelas Basis entah bagaimana akan terlihat seperti:
Catatan: - Jangan lupa untuk menangani berbagai pengecualian yang perlu ditangani dalam kode.
sumber
Jika ada yang mencari cara untuk membuat instance kelas meskipun kelas mengikuti Pola Singleton, berikut adalah cara untuk melakukannya.
Ini hanya berfungsi untuk kelas yang menerapkan pola tunggal menggunakan konstruktor pribadi.
sumber
Anda juga dapat memanggil metode di dalam objek yang dibuat.
Anda bisa membuat objek instan dengan memanggil konstruktor pertama dan kemudian memanggil metode pertama dalam objek yang dibuat.
sumber
String
sebagai parameter? Menjadi sedikit berantakan ketika Anda mengubah urutan konstruktorgetConstructor(ClassName.class)
lebih baik, kurasa. Bahkan jika urutan konstruktor berubah di kelas, tidak perlu menemukan posisi secara manualJawaban bermanfaat lainnya. Bagaimana cara menggunakan getConstructor (params) .newInstance (args)?
Dalam kasus saya, konstruktor kelas saya menggunakan Webdriver sebagai parameter, jadi gunakan kode di bawah ini:
sumber