Sınıf.() forName vs ClassLoader.() loadClass dinamik yükleme için kullanılacak olan?
Dinamik sınıf yükleme ne zaman, ne zaman kullanmak için uygun değil
Class.forName("SomeClass");
ve ne zaman kullanmalıyım
ClassLoader.getSystemClassLoader().loadClass("SomeClass");
Ya da, aynı şeyi yapmanın iki yolu vardır?
CEVAP
Oldukça farklı!
Class.forName(String)
, belgelerinde belirtildiği gibi
Döner Sınıfın belirli bir dize adı ile sınıf veya arabirim ile ilişkili nesne. Bu yöntem eşdeğerdir çağırma:
Class.forName(className, true, currentLoader)
(true
burada ifade edersınıf başlatmak istiyor musunuz?)
, 12**: diğer taraftan
Bu yöntem çağırma
loadClass(name, false)
yürütmesini eşdeğerdir.
(burada, boolean ilgisi yok başlatma; ama eğer kontrol loadClass(String, boolean) belgeleri, göreceksiniz hepsi, mümkün olduğu kadar çok yük sınıfı, başlatılamıyor).
Birincisi (Class.forName("SomeClass");
):
- bu kodu çağıran sınıf yüklenen sınıf yükleyicisi kullanın
- sınıf (tüm statik başlatıcılar çalışır) başlatılamadı
(**10) Diğer:
- kullan "sistem" sınıf yükleyicisi (which is overridable)
- değil sınıf (ki, eğer bu OLANLARI bir sürücü yüklemek için kullanırsanız, kayıtlı bir işe yaramaz, gerekli OLANLARI kullanmak mümkün olmayacaktır!) başlatılamadı
Tomcat gibi bir konteyner üzerinde yürütülen bir web uygulama kodlama varsayalım. Tomcat yaptığı her web uygulaması için bir sınıf yükleyicisi (web uygulamalarını daha sonra boşaltın ve bellek -- yayın edebilir, bu yüzden özel bir sınıf bu iş için loader lazım!) oluşturun. Bu durumda, her iki aramayı da oldukça farklı sonuçlar verecektir görebilirsiniz!
Sınıf yükleme ve başlatma hakkında daha detaylı ve güvenilir bilgi için, kontrol edin Java Dili Belirtimi (3) en son sayı 12.2 12.4 bölümler.
Nasıl python sınıf bir dinamik olarak ...
Zaten Git deposu için kaydedilmiş olan...
Nasıl sahnelenecek olan değişiklikleri...
Nasıl no-ri-hayır-rdoc gem için varsay...
Dinamik hücre düzenleri için UİTableVi...