SORU
14 NİSAN 2010, ÇARŞAMBA


Yansıma ile alıcı çalıştırmak için en iyi yolu

Belirli bir açıklama ile bir alanın değerini almak istiyorum, yansıması ile bu Alan Nesne almak mümkün duyuyorum. Sorun bu alan önceden her zaman alıcı bir yöntem olacak biliyorum ama her zaman özel olacak. Alıcı yöntemi çağırmak için tercih ederim ama setAccesible(true) kullanın ve değeri PermissionManager hiçbir zaman () olduğunu biliyorum.

Aramak için yöntem aramak biliyorum ki, "" boolean alanlar için örneğin bazen olarak adlandırılır biliyorum ama ("alanadı"). alanadı

Eğer bu alıcı (birçok çerçeveler belki başka bir şekilde onlar bunu alıcı/ayarlayıcı öznitelikleri erişmek için kullanın) çağırmak için daha iyi bir yolu olup olmadığını merak ediyorum.

Teşekkürler

CEVAP
14 NİSAN 2010, ÇARŞAMBA


Bu doğru yönde bir işaret gerektiğini düşünüyorum

import java.beans.*

for (PropertyDescriptor pd : Introspector.getBeanInfo(Foo.class).getPropertyDescriptors()) {
  if (pd.getReadMethod() != null && !"class".equals(pd.getName()))
    System.out.println(pd.getReadMethod().invoke(foo));
}

Beanınfo veya PropertyDescriptor örnekleri oluşturabilirsiniz unutmayın kendiniz, yani Introspector kullanmadan. Ancak, Introspector normalde İyi bir önbellekleme içten (tm). Eğer bir önbellek olmadan mutlu olup olmadığını bile gidebilirsiniz

// TODO check for non-existing readMethod
Object value = new PropertyDescriptor("name", Person.class).getReadMethod().invoke(person);

Ancak, java uzatmak kolaylaştıran pek çok kütüphane vardır.fasulye API. Commons BeanUtils iyi bilinen bir örnektir. Orada, sadece yaparsın:

Object value = PropertyUtils.getProperty(person, "name");

BeanUtils diğer kullanışlı şeyler geliyor. kullanıcı giriş özelliklerini ayarlama kolaylaştırmak için-the-fly dönüşüm değeri (string nesnesi, nesneye string) yani.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Andrea Lewis

    Andrea Lewis

    14 Mart 2013
  • SelmerSaxMan

    SelmerSaxMan

    24 HAZİRAN 2006
  • Trulia

    Trulia

    29 Kasım 2006