我在使用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的新手,所以希望能帮助您理解如何使它生效。
答案 0 :(得分:1)
我想我找到了答案。我将错误的来源跟踪到IdProvider的构造函数。在其构造函数中,它使用getResource()获取文件,如下所示:
URL theResource = getClass().getResource("aFile.txt");
File aFile = new File(FileLocator.toFileURL(theResource).getPath());
我发现this bug report的错误消息与我看到的相同。我的理解是,如果您使用Eclipse,则FileLocator可以工作,但是如果代码/测试是从命令行运行的,那是不行的。
我已经更改了获取资源的方式:
InputStream theResource = getClass().getResourceAsStream("aFile.txt");
错误已经消失,所以我认为Guice / xtend与它无关。