java - 尝试使用反射调用私有(private)字段上的方法时出现 NullPointerException

标签 java reflection

原始问题描述How to run method on private field using reflection?

类(class)是

public class SecureResource {

    private HttpServletRequest request;
        public SecureResource() {}

    @Inject
    public SecureResource(@Nonnull final HttpServletRequest request) {
        this.request = request;
    }
    // more things
}

基于@Jon 的回答

(Where resource is a reference to the relevant instance of SecureResource.)

我做了以下事情

Class cls = response.getResourceClass();
Object obj = cls.newInstance();
Field f = cls.getDeclaredField("request");
f.setAccessible(true);
HttpServletRequest request = (HttpServletRequest) f.get(obj);
String auth = request.getHeader("X-AUTH");

我得到的requestnull

并且字段 f 不为空

private javax.servlet.http.HttpServletRequest com.sunrunhome.blackbird.service.SecureResource.request

请告诉我我在哪里犯了错误?

最佳答案

代码是正确的,但谁说request应该null?向我们展示您的资源类的默认构造函数。 (注意:如果您依赖于某些注入(inject)的发生,则它不会发生。注入(inject)框架仅在您不规避它们时才起作用。)

关于java - 尝试使用反射调用私有(private)字段上的方法时出现 NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18476024/

相关文章:

c# - 使用 CompilerParameters 引用当前程序集

java - 在反射中处理 HashMap

css - 无法让我灵活的动画背景反射工作

c# - 给定一个对象,我如何以编程方式告诉它支持哪些接口(interface)?

java - Maven 编译器错误

java - Java中获取位数的值范围

Java HttpOnly 标志

java - 正则表达式不适用于 Android Studio 中字符串前面的特殊字符

java - 操作系统能否阻止 Java 进程进行垃圾收集?

c# - 如何将类对象转换为字符串?