【发布时间】:2021-06-16 00:36:13
【问题描述】:
我对 Guice 注射有点陌生。我的项目中出现了 nullptr 异常。
我怀疑是因为我没有正确设置注入依赖。
经查,是由S3Driver.java文件中的invokeSomeMethod引起的,具体是lambdaHelper.invokeSomeMethod()。
您能否提供一些关于出了什么问题的提示?
谢谢
S3Driver.java
// Constructor
public S3Driver() {
Injector injector = createInjector(new LambdaHelperModule(), new S3Module());
this.lambdaHelper = injector.getInstance(LambdaHelper.class);
}
...
lambdaHelper.invokeSomeMethod(); // Nullptr Exception
这是我的项目设置:
LambdaHelper.java
// Constructor
public LambdaHelper(S3Class s3Class) {
this.s3Class = s3Class;
}
S3Class.java
...
// Constructor
public S3Class(S3Presigner p, S3Client s) {this.p = p; this.s = s;};
LambdaHelperModule.java
public LambdaHelper provideLambdaHelper() {
S3Class s3Class = S3Class.builder()
.s3Presigner(S3Presigner.builder().build())
.s3Client(S3Client.builder().build())
.build();
return new LambdaHelper(s3Class);
}
S3Module.java
public S3Class provideS3Class() {
return new S3Class(S3Presigner.builder().build(),
S3Client.builder().build());
}
【问题讨论】:
-
参见What is a stack trace, and how can I use it to debug my application errors? & What is a Null Pointer Exception, and how do I fix it? -- 注意:第一个链接应该解释为什么我们需要minimal reproducible example 和堆栈跟踪以便能够提供帮助。第二个更具体地解决了 NPE。
-
在 lamdaHelper 上调用方法之前添加空检查,
if(lambdaHelper !=null) {lambdaHelper.invokeSomeMethod();} -
在
S3Driver构造函数中检查this.lambdaHelper = injector.getInstance(LambdaHelper.class);行后lamdaHelper的值 -
@AndrewThompson 我重新打开了,因为 NullPointerException 在 Guice 上下文中非常具体,只是一个简单的错误配置项就可能导致此类问题。而且由于是配置而不是代码,所以很难找到。
标签: java nullpointerexception guice