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
Ö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

DeÄŸiÅŸim statik son alan Java kullanara...
Nasıl bir sınıf içinde özel bir alan d...
Java özel durum sınıfı tanımlamak için...
Nasıl bir sınıf içinde bir Java paketi...
Nasıl Java 8 lambda parametre olarak a...