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

  • Capcom Unity

    Capcom Unity

    5 NİSAN 2010
  • chrmoe

    chrmoe

    7 Kasım 2006
  • Digital Bounds

    Digital Boun

    19 Temmuz 2013