如何使用反射在私有字段上运行方法?

day*_*mer 1 java reflection

我有一个资源类

public class SecureResource {

    private HttpServletRequest request;

    // some more things here
}
Run Code Online (Sandbox Code Playgroud)

我想request.getHeader('X-AUTH')使用java反射运行tun ?

我试过了什么?

Field f = response.getResourceClass().getDeclaredField("request");
f.setAccessible(true);
f.get("X-AUTH");
Run Code Online (Sandbox Code Playgroud)

我明白了

java.lang.IllegalArgumentException: Can not set javax.servlet.http.HttpServletRequest field com.sn.bb.service.SecureResource.request to java.lang.String
Run Code Online (Sandbox Code Playgroud)

我错过了什么?我怎样才能运行request.getHeader('X-AUTH')f

Jon*_*eet 10

你现在正试图让这个字段好像是一个实例上的字段java.lang.String.大概你已经有了一个实例SecureResource,所以你想要打电话:

Field f = response.getResourceClass().getDeclaredField("request");
f.setAccessible(true);
HttpServletRequest request = (HttpServletRequest) f.get(resource);
String auth = request.getHeader("X-AUTH");
Run Code Online (Sandbox Code Playgroud)

(resource对相关实例的引用在哪里SecureResource.)

也就是说,即使你已经开始工作,我也会强烈劝阻它.你的代码不适用于有严格安全管理器的情况,面对实现的变化会很脆弱,而且通常建议你尝试做一些没有设计类的东西.