Để truy cập các trường riêng tư, bạn cần lấy chúng từ các trường được khai báo của lớp và sau đó làm cho chúng có thể truy cập được:
Field f = obj.getClass().getDeclaredField("stuffIWant"); //NoSuchFieldException
f.setAccessible(true);
Hashtable iWantThis = (Hashtable) f.get(obj); //IllegalAccessException
EDIT : như đã được nhận xét bởi aperkins , cả hai truy cập vào trường, đặt nó là có thể truy cập và truy xuất giá trị có thể ném Exceptions, mặc dù các trường hợp ngoại lệ được kiểm tra duy nhất bạn cần lưu ý được nhận xét ở trên.
Các NoSuchFieldExceptionsẽ được ném nếu bạn yêu cầu một lĩnh vực bởi một tên mà không tương ứng với một lĩnh vực khai báo.
obj.getClass().getDeclaredField("misspelled"); //will throw NoSuchFieldException
Các IllegalAccessExceptionsẽ được ném nếu lĩnh vực này là không thể truy cập (ví dụ, nếu nó là tư nhân và đã không được thực hiện truy cập thông qua bỏ lỡ các f.setAccessible(true)dòng.
Các RuntimeExceptions có thể bị ném là SecurityExceptions (nếu JVM SecurityManagersẽ không cho phép bạn thay đổi khả năng truy cập của một trường) hoặc IllegalArgumentExceptions, nếu bạn thử và truy cập vào trường trên một đối tượng không thuộc loại của trường:
f.get("BOB"); //will throw IllegalArgumentException, as String is of the wrong type