.class dosyasına giden bir yol var ve bunu çalışan bir programdan başlatmak istiyorum. Bu sınıfı "yüklemem gerekiyor" ancak sınıf yolu benim .jar veya projemde değil, yanında bir klasörde (Class.forName() kullanamaz). Bu sınıfı nasıl oluşturabilirim?Bir Java sınıfını .class dosyasından başlatmak için yansıma kullanma
cevap
Sen olarak bir sonraki devam edebilirsiniz:
File myFolder = new File("myfolder");
URLClassLoader classLoader = new URLClassLoader(new URL[]{myFolder.toURI().toURL()}, Thread.currentThread().getContextClassLoader());
Class<?> myClass = Class.forName("my.package.Myclass", true, classLoader);
Myclass obj = (Myclass)myClass.newInstance();
Önce o zaman bu yeni ClassLoader
kullanarak sınıfı yüklemek, ebeveyn olarak bağlam Classloader
kullanılarak URLClassLoader
bir örneğini oluşturmak ve nihayet bunu çağırır burada (bir örneğini oluşturmak argüman içermeyen bir kurucu).
'u kullanmanız gerekiyor, teşekkürler, iyi çalışıyor, ancak Class.forName() adında "MyClass" paket adıyla geçebilir miyim? Çünkü paketi biliyorum ama birisi benim programım için bir "eklenti" oluşturmak istiyorsa, onun sınıfının benimkiyle aynı paket adına sahip olması gerekir. Sınıf ismini kolayca alabilirim (.class'ın adı) ama paketinin adını alabilir miyim? – psyked
Eh, _MyClass.class_ dosyanızın _myfolder_ dizininde nerede bulunduğuna bağlıdır, çünkü dizine ve sınıf dosyasında tanımlanan pakete saygı duymanız gerekir. Paket adı foo.bar ise, dosyanız _myfolder/foo/bar/MyClass.class_ adresinde olmalı ve "foo.bar.MyClass" kullanmanız gerekir. Sınıfta tanımlanmış bir paket yoksa, sınıf doğrudan _myfolder_ altına yerleştirilmeli ve gerçekten de "MyClass" kullanabilirsiniz. –
- 1. Nesne [] Class [] Java
- 2. Java Yansıma
- 3. Eklentileri başlatmak için jQuery live() öğesini kullanma?
- 4. AngularJS, class = class = bir değişken atamak için class =
- 5. Zamanlayıcısını başlatmak ve durdurmak için ScheduledExecutorService'ı kullanma
- 6. Java Yansıma Pasaj çıkış
- 7. CHCSVParser sınıfını Kullanma
- 8. Java Html Sınıfını Kullanarak belirli html sınıfını nasıl silebilirim?
- 9. Bir Ruby sınıfını başlatmayı çağırmadan başlatmak mümkün mü?
- 10. Java: yansıma için ilkel bir dizi sınıfı almanın uygun yolu
- 11. Yansıma API
- 12. Clojure'dan bir gemide verilen JRuby sınıfını kullanma
- 13. Sorun ASP.NET'te System.Web.Caching.Cache sınıfını kullanma
- 14. Video sınıfının bir örneğini oynatmak için FLVPlayback Sınıfını Kullanma
- 15. Java'da Kotlin sınıfını kullanma: Sembol bulamıyor
- 16. Ant java görevi sınıfını bulamıyor
- 17. Alan adını kullanarak nesne için alan belirleme (Java Yansıma)
- 18. Java paketleri: no class def
- 19. Java Yansıma Çağrılarını kontrol etmek için uygun yol?
- 20. Normal sütunları için yansıma
- 21. Clojure'da Java Swing sınıfını genişletme
- 22. Java yerleşik sınıfını yeniden derleyin
- 23. Kısayol bir etkinlik başlatmak için
- 24. Java: yansıma yoluyla ek açıklamalara erişemez
- 25. Metin dosyasından Java okuması
- 26. GWT'nin NumberFormat sınıfını paylaşılan pakette kullanma
- 27. Yansıma aracılığıyla bir Java alanından dize değeri nasıl alınır?
- 28. Constructor nesnesinden argümanlar türleri al (Java Yansıma)
- 29. Scala Trait'i ile Java Sınıfını Genişletme
- 30. Yansıma
URLClassLoader – ControlAltDel