Java 正在引发空指针异常
我正在努力学习谷歌果汁。我有一个InstallConfigurationModule类,它具有创建typeA和TypeB对象所需的所有依赖项。并且,得到了一个类,如下图所示的class Car,我正在尝试进行构造函数注入。当调用run方法时,我在system.out.println行中得到空指针异常。我确信ModuleA,ModuleB在我的 InstallConfigurationModulemodule,如果我说Bind(TypeA.class)或Bind(TypeB.class),我会得到google juice错误,“到TypeA或TypeB的绑定已经配置”Java 正在引发空指针异常,java,dependency-injection,guice,Java,Dependency Injection,Guice,我正在努力学习谷歌果汁。我有一个InstallConfigurationModule类,它具有创建typeA和TypeB对象所需的所有依赖项。并且,得到了一个类,如下图所示的class Car,我正在尝试进行构造函数注入。当调用run方法时,我在system.out.println行中得到空指针异常。我确信ModuleA,ModuleB在我的 InstallConfigurationModulemodule,如果我说Bind(TypeA.class)或Bind(TypeB.class),我会得到
public class InstallConfigurationModule extends AbstractModule {
@Override
protected void configure() {
install(new ModuleA());
install(new ModuleB());
}
}
public class Car
{
private Type A;
private Type B;
@inject
void SetCar(Type A, Type B)//not the constructor
{
this.A=A;
this.B=B;
}
private void run()
{
System.out.println(A.toString()) //throw null pointer exception
}
工作内容:
private void run()
{
Injector injector = Guice.createInjector(new
InstallConfigurationModule());
TypeA typeA =injector.getInstance(TypeA.class);
System.out.println(A.toString()) //works fine
}
为什么当我尝试不使用creatingInjector时会得到NPE。谢谢你的帮助
PS:非常新的果汁。让我们假设我们有以下组件:
- 类接口
- 接口实现
- 配置模块
import com.google.inject.name.Named;
import javax.inject.Inject;
public class Car {
private Type a;
private Type b;
@Inject
public void setA(@Named("a") Type a) {
this.a = a;
}
@Inject
public void setB(@Named("b") Type b) {
this.b = b;
}
public void methodIsCalled(){
run();
}
private void run() {
System.out.println(a.toString());
System.out.println(b.toString());
}
}
因此,注入器将知道如何配置类型实例
最后,在main或configuration类中,我们有以下语句
public class MainClass {
public static void main(String[] args){
Injector injector = Guice.createInjector(new InstallConfigurationModule());
Car car = injector.getInstance(Car.class);
// method that it calss the run method
car.methodIsCalled();
}
}
这是输出
a
b
谢谢你的回复。当我使用安装模块时,它知道如何构造ObjectA,ObjectB right?。另外,假设我不需要从main调用Car类的某些方法。我还应该为汽车创建喷油器实例吗?。我不明白我缺少什么来获得NPE有什么意义。这是我的荣幸。是的,框架知道如何在为模块充电时构建新实例。Injector实例是必需的,但它取决于您正在创建的应用程序。注入器创建类的实例,解析注释并初始化类中的字段;如果没有喷油器,则类为空。
import com.google.inject.name.Named;
import javax.inject.Inject;
public class Car {
private Type a;
private Type b;
@Inject
public void setA(@Named("a") Type a) {
this.a = a;
}
@Inject
public void setB(@Named("b") Type b) {
this.b = b;
}
public void methodIsCalled(){
run();
}
private void run() {
System.out.println(a.toString());
System.out.println(b.toString());
}
}
public class MainClass {
public static void main(String[] args){
Injector injector = Guice.createInjector(new InstallConfigurationModule());
Car car = injector.getInstance(Car.class);
// method that it calss the run method
car.methodIsCalled();
}
}
a
b