SORU
28 Temmuz 2009, Salı


Nasıl Java özel bir alan okuyabilirim?

3 taraf içinde kötü tasarlanmış bir sınıf JAR var ve bir giriş yapmam gereközelalanlar. Örneğin,

class IWasDesignedPoorly {
    private Hashtable stuffIWant;
}

IWasDesignedPoorly obj = ...;

Nasıl yansıma stuffIWant değerini almak için kullanabilir miyim?

CEVAP
28 Temmuz 2009, Salı


Özel alanlara erişmek için, sınıfın onları almak gerekirilan ettialanları ve bunları erişilebilir hale getirmek:

Field f = obj.getClass().getDeclaredField("stuffIWant"); //NoSuchFieldException
f.setAccessible(true);
Hashtable iWantThis = (Hashtable) f.get(obj); //IllegalAccessException

EDİT: olarak yorumladıaperkinsher iki alan erişim, erişilebilir olarak ayar ve değeri Exceptions, tek olsa da atar tüm alınıyorkontrol ettidikkatli olmanız gereken özel durumlar yukarıda yorumladı.

NoSuchFieldException eğer bildirilen bir alana tekabül etmeyen bir isimle bir alan için sorsaydın atılmış olacaktır.

obj.getClass().getDeclaredField("misspelled"); //will throw NoSuchFieldException

IllegalAccessException alan erişilebilir değilse özel ve erişilebilir f.setAccessible(true) satır eksik ile yapıldı değil. (örneğin, atılmış olurdu

RuntimeExceptions olabilecek atılır ya SecurityExceptions (JVM SecurityManager olmaz değiştirmenize olanak sağlayan bir alanın erişilebilirlik), ya da IllegalArgumentExceptions, Eğer sen denemek ve erişim alanında bulunan bir nesne değil alanın sınıfın türü:

f.get("BOB"); //will throw IllegalArgumentException, as String is of the wrong type

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • foreignimage

    foreignimage

    13 HAZİRAN 2006
  • ibebrent

    ibebrent

    23 Temmuz 2007
  • ParryGripp

    ParryGripp

    12 AĞUSTOS 2006