Saya melihat sebagai pertanyaan: Membuat instance kelas dari nama stringnya yang menjelaskan cara membuat instance kelas saat memiliki namanya. Apakah ada cara untuk melakukannya di Java? Saya akan memiliki nama paket dan nama kelas dan saya harus dapat membuat objek yang memiliki nama khusus itu.
java
string
object
instantiation
ict1991
sumber
sumber
Jawaban:
Dua arah:
Metode 1 - hanya untuk kelas yang memiliki konstruktor tanpa argumen
Jika kelas Anda memiliki konstruktor no-arg, Anda bisa mendapatkan
Class
objek menggunakanClass.forName()
dan menggunakannewInstance()
metode untuk membuat instance (meskipun berhati-hatilah karena metode ini sering dianggap jahat karena dapat mengalahkan pengecualian yang dicentang dari Java).Sebagai contoh:
Metode 2
Pendekatan alternatif yang lebih aman yang juga berfungsi jika kelas tidak memiliki konstruktor no-arg adalah dengan membuat kueri objek kelas Anda untuk mendapatkan
Constructor
objeknya dan memanggilnewInstance()
metode pada objek ini:Kedua metode tersebut dikenal sebagai refleksi . Anda biasanya harus mengetahui berbagai pengecualian yang dapat terjadi, termasuk hal-hal seperti:
sumber
newInstance()
, dapatkah kita mengembalikannya ke objek kita sendiri?instance
kecom.foo.MyClass
? mengingat bahwa com.foo.MyClass hanyalah sebuah stringsumber
gunakan Class.forName ("Nama string kelas"). newInstance ();
Ini akan menyebabkan kelas bernama A diinisialisasi.
sumber
Untuk membuatnya lebih mudah mendapatkan nama kelas yang sepenuhnya memenuhi syarat untuk membuat instance menggunakan
Class.forName(...)
, seseorang dapat menggunakanClass.getName()
metode ini. Sesuatu seperti:Kemudian Anda dapat mentransmisikan objek yang Anda dapatkan kembali ke kelas mana pun yang Anda teruskan
makeObject(...)
:sumber
clazz.newInstance()
bukangetName
itufromName
?Gunakan refleksi java
Membuat Objek Baru Tidak ada ekuivalen dengan pemanggilan metode untuk konstruktor, karena pemanggilan konstruktor sama dengan membuat objek baru (untuk lebih tepatnya, membuat objek baru melibatkan alokasi memori dan konstruksi objek). Jadi persamaan terdekat dengan contoh sebelumnya adalah dengan mengatakan:
yang menemukan konstruktor yang menangani tipe parameter yang ditentukan dan memanggilnya, untuk membuat instance baru dari objek. Nilai dari pendekatan ini adalah bahwa itu murni dinamis, dengan pencarian dan pemanggilan konstruktor pada waktu eksekusi, bukan pada waktu kompilasi.
sumber
Class.forName ("ClassName") akan menyelesaikan tujuan Anda.
sumber
sumber
sesuatu seperti ini seharusnya bekerja ...
sumber
Menggunakan
newInstance()
secara langsung sudah tidak digunakan lagi pada Java 8. Anda perlu menggunakanClass.getDeclaredConstructor(...).newInstance(...)
dengan pengecualian yang sesuai.sumber