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

  • AllYourNewsByMe

    AllYourNewsB

    18 Temmuz 2011
  • DragsterMC Gaming

    DragsterMC G

    30 HAZİRAN 2013
  • MikeyMacintosh

    MikeyM

    28 Aralık 2009