gpt4 book ai didi

java - Dagger 2 - 两个提供相同接口(interface)的方法

转载 作者:IT老高 更新时间:2023-10-28 21:11:34 27 4
gpt4 key购买 nike

假设我有:

public interface Shape  {}


public class Rectangle implements Shape {

}

public class Circle implements Shape {

}

我有一个 ApplicationModule 需要为 RecCircle 提供实例:

@Module
public class ApplicationModule {
private Shape rec;
private Shape circle;

public ApplicationModule() {
rec = new Rectangle();
circle= new Circle ();
}

@Provides
public Shape provideRectangle() {
return rec ;
}

@Provides
public Shape provideCircle() {
return circle;
}
}

ApplicationComponent:

@Component(modules = ApplicationModule.class)
public interface ApplicationComponent {
Shape provideRectangle();
}

按原样使用代码 - 它不会编译。说错了

Error:(33, 20) error: Shape is bound multiple times.

这对我来说是有道理的,因为组件试图找到一个 Shape 实例,它找到了其中的两个,所以它不知道该找哪一个返回。

我的问题是 - 我该如何处理这个问题?

最佳答案

我最近在这篇文章中发布了这样一个问题的答案:

Dagger 2 : error while getting a multiple instances of same object with @Named

你需要像这样在你的模块中使用 @Named("someName"):

@Module
public class ApplicationModule {
private Shape rec;
private Shape circle;

public ApplicationModule() {
rec = new Rectangle();
circle= new Circle ();
}

@Provides
@Named("rect")
public Shape provideRectangle() {
return rec ;
}

@Provides
@Named("circle")
public Shape provideCircle() {
return circle;
}

}

然后在你需要注入(inject)它们的地方写

@Inject
@Named("rect")
Shape objRect;

这很有趣,但你必须在 Kotlin 中以不同的方式注入(inject):

@field:[Inject Named("rect")]
lateinit var objRect: Shape

关于java - Dagger 2 - 两个提供相同接口(interface)的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39953933/

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