为了访问私有字段,你需要从类的声明字段中获取它们,然后使其可访问:
Field f = obj.getClass().getDeclaredField("stuffIWant"); //NoSuchFieldExceptionf.setAccessible(true);Hashtable iWantThis = (Hashtable) f.get(obj); //IllegalAccessException编辑:正如
aperkins所说,访问字段,将字段设置为可访问并检索值都可能引发
Exceptions,尽管上面需要注释的唯一检查异常。
在NoSuchFieldException如果你问一个字段由不符合声明的字段的名称将被抛出。
obj.getClass().getDeclaredField("misspelled"); //will throw NoSuchFieldException该
IllegalAccessException会如果字段是不可访问(被抛出例如,如果是私人和通过失踪了尚未作出访问
f.setAccessible(true)线。
该
RuntimeException可抛出s为要么
SecurityExceptionS(如果JVM的
SecurityManager将不允许你改变一个字段的可访问性),或
IllegalArgumentExceptionS,如果你尝试接入领域的对象不是字段的类的类型上:
f.get("BOB"); //will throw IllegalArgumentException, as String is of the wrong type


