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

  • kimaliz

    kimaliz

    18 Temmuz 2006
  • thepoke64738

    thepoke64738

    17 HAZİRAN 2011
  • TouchePro

    TouchePro

    27 EYLÜL 2007