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

  • arnejann

    arnejann

    3 Kasım 2007
  • Epic Tutorials for iPhone, iPad and iOS

    Epic Tutoria

    18 EYLÜL 2011
  • Missouri Star Quilt Company

    Missouri Sta

    18 ŞUBAT 2009