为了访问私有字段,您需要从类的声明字段中获取它们,然后使其可访问:
Field f = obj.getClass().getDeclaredField("stuffIWant"); //NoSuchFieldException
f.setAccessible(true);
Hashtable iWantThis = (Hashtable) f.get(obj); //IllegalAccessException
编辑:如已经由aperkins评论,访问该字段,将其设置为可访问和检索值将会引发异常,虽然唯一检查的异常你需要注意的是上面的注释。
如果您通过不对应于声明字段的名称请求字段,则会抛出NoSuchFieldException。
obj.getClass().getDeclaredField("misspelled"); //will throw NoSuchFieldException
如果字段不可访问(例如,如果它是私有的并且没有通过缺少f.setAccessible(true)行可访问),则将抛出IllegalAccessException。
可能抛出的RuntimeExceptions是SecurityExceptions(如果JVM的SecurityManager不允许您更改字段的辅助功能)或IllegalArgumentExceptions,如果您尝试访问的字段不是字段的类的类型的对象:
f.get("BOB"); //will throw IllegalArgumentException, as String is of the wrong type