吉斯:在默认构造函数中将注入的类用作局部变量

时间:2018-08-28 10:56:51

标签: java guice xtend

我在使用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的新手,所以希望能帮助您理解如何使它生效。

1 个答案:

答案 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与它无关。