java - Guice:在默认构造函数中使用注入的类作为局部变量
问题描述
我在使用 Guice 的 xtend 文件中有一个 Java 类,如下所示:
class myClass {
@Inject private extension classA
@Inject private extension classB
// methods
// ...
}
我想添加一个整数字段并修改默认构造函数以使用帮助器类 IdProvider 设置它,执行如下操作:
import some.package.IdProvider
class myClass {
@Inject private extension classA
@Inject private extension classB
private long mMaxId
new() {
var IdProvider provider
mMaxId = provider.getMaxId("Student")
}
// methods
// ...
}
但是这不起作用,我收到此错误:
com.google.inject.ProvisionException:Guice 配置错误。注入构造函数时出错,java.lang.NullPointerException
我也试过这个,但我得到了同样的错误:
import some.package.IdProvider
class myClass {
@Inject private extension classA
@Inject private extension classB
private long mMaxId
@Inject private IdProvider provider
new() {
mMaxId = provider.getMaxId("Student")
}
// methods
// ...
}
我是 xtend 和 Guice 的新手,所以任何帮助理解如何让它工作将不胜感激。
解决方案
我想我找到了答案。我将错误的根源追踪到 IdProvider 的构造函数。在其构造函数中,它使用 getResource() 获取一个文件,如下所示:
URL theResource = getClass().getResource("aFile.txt");
File aFile = new File(FileLocator.toFileURL(theResource).getPath());
我发现这个错误报告与我看到的错误消息相同。我的理解是,如果您使用 Eclipse,FileLocator 将起作用,但如果代码/测试是从命令行运行的(这就是我正在做的),则不会。
我已经改变了获取资源的方式:
InputStream theResource = getClass().getResourceAsStream("aFile.txt");
并且错误已经消失,所以我认为 Guice/xtend 与它无关。
推荐阅读
- python - CQL filter method - python
- spring - 重试下一个 Flux 元素并忽略成功的元素
- node.js - 将 Elastic Beanstalk 上的 Web 服务器与 MongoDB Atlas 上的数据库服务器连接时出错
- java - latest date form a list of string including month name
- ansible - Ignore errors within expect
- typescript - 具有属性取决于数据属性的嵌套元素的数组不响应 vue ts
- c - 设置 GTK 容器的子项的属性
- flutter - 如何使排序向下滑动窗口?
- c# - 如何查找设备(Hololens)经纬度
- android - 回收器视图水平滚动在导航抽屉标题中不起作用