İstediğiniz şeyi yapmak için dil desteği yok.
Çalışma zamanında yansıma kullanarak bir türün üyelerine yansıtıcı olarak erişebilirsiniz (örneğin, Class.getDeclaredFields()
bir dizi elde etmek için ileField
), ancak ne yapmaya çalıştığınıza bağlı olarak, bu en iyi çözüm olmayabilir.
Ayrıca bakınız
İlgili sorular
Misal
İşte yansımanın neler yapabileceğini gösteren basit bir örnek.
import java.lang.reflect.*;
public class DumpFields {
public static void main(String[] args) {
inspect(String.class);
}
static <T> void inspect(Class<T> klazz) {
Field[] fields = klazz.getDeclaredFields();
System.out.printf("%d fields:%n", fields.length);
for (Field field : fields) {
System.out.printf("%s %s %s%n",
Modifier.toString(field.getModifiers()),
field.getType().getSimpleName(),
field.getName()
);
}
}
}
Yukarıdaki kod parçası, belirtilen tüm alanları incelemek için yansıma kullanır class String
; aşağıdaki çıktıyı üretir:
7 fields:
private final char[] value
private final int offset
private final int count
private int hash
private static final long serialVersionUID
private static final ObjectStreamField[] serialPersistentFields
public static final Comparator CASE_INSENSITIVE_ORDER
Etkili Java 2. Sürüm, Öğe 53: Yansıtma için arayüzleri tercih edin
Bunlar kitaptan alıntılardır:
Bir Verilen Class
nesne, sen alabilirsiniz Constructor
, Method
ve Field
sınıfın kurucular, yöntemleri ve alanları temsil eden örnekler. [Bunlar] Eğer altta yatan meslektaşları manipüle izin düşünceli . Ancak bu gücün bir bedeli var:
- Derleme zamanı denetiminin tüm avantajlarını kaybedersiniz.
- Yansıtıcı erişimi gerçekleştirmek için gereken kod beceriksiz ve ayrıntılıdır.
- Performans zarar görür.
Kural olarak, normal uygulamalarda çalışma zamanında nesnelere yansıtıcı bir şekilde erişilmemelidir.
Düşünme gerektiren birkaç karmaşık uygulama vardır. Örnekler arasında [... kasıtlı olarak ihmal edilmiştir ...] Başvurunuzun bu kategorilerden birine girip girmediğine dair herhangi bir şüpheniz varsa, muhtemelen yoktur.