2016-04-05 16 views
2

Sınıf sınıfından bir nesne oluşturmaya çalışıyorum (java yansıması aracılığıyla) - kullanıcı bir kurucu seçer ve bu kurucu için değişkenleri okumam gerekir (bazılarının ilkel türler).
Şimdi gördüğünüz gibi kodum sadece tamsayı paramları için çalışıyor.Constructor nesnesinden argümanlar türleri al (Java Yansıma)

Güncel argümanın türünü nasıl dinamik olarak bulabilirim ve klavyeden nasıl okuyabilirim?

cevap

0

Bu zor olacaktır. Elbette tarayıcının bazı türlerde okuması gereken bazı temel yöntemleri vardır, fakat diğer argüman türlerini okumak isterseniz, bunları kendiniz okumak için bir yol bulmak zorundasınız. Bunun için

, sen Constructor.getParameterTypes() kullanabilirsiniz: Yukarıda tam değildir

... 
Object[] arguments = new Object[constructors[constr].getParameterCount()]; 

Class<?>[] pTypes = constructors[constr].getParameterTypes(); 

for (int i = 0; i < arguments.length; i++) { 
    System.out.println("Write argument #" + (i + 1) + ". Of type: "+pTypes[i].getName()); 

    if(pTypes[i].equals(int.class)) {    
     arguments[i] = keyboard.nextInt(); // read an int 
    } else if(pTypes[i].equals(String.class)) { 
     arguments[i] = keyboard.next(); // read a String 
    } else { 
     // custom read code for other types 
    } 
} 
... 

Not olduğunu, tarayıcı burada göstermedi çok diğer türleri okumak için daha yöntemleri vardır.

Diğer argüman türlerini okumak için en iyi strateji, bunları bir dize olarak okumak ve bunları bazı fabrika yöntemleriyle karşılık gelen nesnelere dönüştürmektir.

+0

Sadece ilkel maddeler için ihtiyacın olduğuna dikkat ettim, bu yüzden söylediğimden daha basit olmalı. Sadece diğer türler için de çalışabileceğini unutmayın. –