gpt4 book ai didi

java - 基本 dagger java 示例 NPE

转载 作者:行者123 更新时间:2023-12-02 10:48:35 25 4
gpt4 key购买 nike

我创建了一个简单的gradle java项目来学习dagger。我有一个灯泡,它依赖于按钮来打开或关闭。我正在尝试在我的主类中打印灯泡的状态。

Dagger 文档指出,如果我们使用 @Inject 注释一个方法,那么 dagger 会在任何人请求时自动注入(inject)该 dep。在我的 BulbFactory 类中,我尝试注入(inject) Bulb 类,因为我无法直接在 Main 类中执行此操作,因为它具有静态方法。当我尝试访问 Bulb 类上的方法时出现 NPE 时,请建议我做错了什么。

按钮.java

class Button {
public boolean getState() {
return state;
}

public void setState(boolean state) {
this.state = state;
}

private boolean state;

@Inject
Button() {
}
}

灯泡.java

public class Bulb {

Button button;
String color;

public Bulb(Button button) {
this.button = button;
}

public void turnOn(){
button.setState(true);
}

public void turnOff(){
button.setState(false);
}

public boolean isTurnedOn(){
return button.getState();
}


}

BulbFactory.java

public class BulbFactory {
@Inject Bulb bulb;

public Bulb getBulb() {
return bulb;
}
}

Main.java

public class Main {
public static void main(String[] args) {
Bulb bulb = new BulbFactory().getBulb();
bulb.turnOn();
System.out.println(bulb.isTurnedOn());
}
}

构建.gradle

    plugins {
id 'java'
}

group 'com.shuklz'
version '1.0-SNAPSHOT'

sourceCompatibility = 1.8

repositories {
mavenCentral()
}

dependencies {
testCompile group: 'junit', name: 'junit', version: '4.12'
compile 'com.google.dagger:dagger:2.17'
annotationProcessor 'com.google.dagger:dagger-compiler:2.17'
}

https://github.com/theshuklz/learning-dagger

最佳答案

就您的设置而言,您的 Bulb 构造函数中缺少 @Inject

import javax.inject.Inject;

public class Bulb {

Button button;

@Inject
public Bulb(Button button) {
this.button = button;
}

}

此外,您当前没有使用 Dagger 来注入(inject)依赖项。

您可以用 Dagger 组件替换 BulbFactory,它会为您创建 Bulb 类。有关组件的更多详细信息可以在这里找到:https://google.github.io/dagger/api/2.14/dagger/Component.html

根据您的情况,您应该能够使用类似以下内容的内容。

import dagger.Component;

@Component
interface BulbComponent {
Bulb getBulb();
}

构建项目后,将生成DaggerBulbComponent。这样您就可以调用 getBulb 来创建一个新的 Bulb 实例。

public class Main {
public static void main(String[] args) {
BulbComponent bulbComponent = DaggerBulbComponent.builder().build();
Bulb bulb = bulbComponent.getBulb();
bulb.turnOn();
System.out.println(bulb.isTurnedOn());
}
}

关于java - 基本 dagger java 示例 NPE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52362030/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com