SORU
15 EKİM 2008, ÇARŞAMBA


Çalışma zamanında, bir temel sınıf uzanan bir Java uygulaması tüm sınıfları bulmak

Böyle bir şey yapmak istiyorum:

List<Animal> animals = new ArrayList<Animal>();

for( Class c: list_of_all_classes_available_to_my_app() )
   if (c is Anamal)
      animals.add( new c() );

Yani, ben bakmak istiyorum ve tüm derslerde kullandığım bir uygulamanın evren ve zaman bulmak bir o iner, Hayvan, istiyorum oluşturmak için yeni bir nesne türü ve ekliyorum listesi. Bu bana pek listesini güncellemek zorunda kalmadan işlevsellik eklemek için izin verir. Aşağıdaki: kaçınabilirim

List<Animal> animals = new ArrayList<Animal>();
animals.add( new Dog() );
animals.add( new Cat() );
animals.add( new Donkey() );
...

Yukarıdaki yaklaşım ile, sadece Hayvan genişleten yeni bir sınıf oluşturun ve otomatik olarak toplanmış olacak.

GÜNCELLEME: 10/16/2008 9:00 Pasifik Standart Saati:

Bu soru, teşekkür ederim harika cevaplar bir sürü üretti. Yanıtları ve benim araştırma, ben gerçekten ne yapmak istiyorum sadece Java altında mümkün olmadığını tespit ettik. Orada yaklaşımlar gibi ddimitrov. ServiceLoader mekanizması olabilir -- ama onlar çok ağır için ne istiyorum, ve inanıyorum ki, sadece hareket sorunu Java kodu için harici bir yapılandırma dosyası.

İstediğim şey devlet için başka bir yol: Hayvanlar benim sınıfta bir statik işlev ve herhangi bir ek yapılandırma olmadan Hayvan -- dan devralan tüm sınıflar bulur başlatır/kodlama. Eğer yapılandırma olursa, sadece Hayvan sınıfı zaten onları örneğini verebilirim. Çünkü bir Java programı sadece gevşek bir federasyon olduğunu anlıyorum .sınıf bunun tek yolu o dosyaları.

İlginç bir şekilde, öyle görünüyor ki bu fairly trivial C#.

CEVAP
11 ŞUBAT 2012, CUMARTESİ


Org kullanıyorum.yansımalar

http://code.google.com/p/reflections/

Reflections reflections = new Reflections("com.mycompany");    
Set<Class<? extends MyInterface>> classes = reflections.getSubTypesOf(MyInterface.class);

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • metagamers

    metagamers

    13 Mayıs 2006
  • Michael Lummio

    Michael Lumm

    25 Mayıs 2007
  • Thom Hall

    Thom Hall

    24 Kasım 2006