我有一个使用抽象类的应用程序。 抽象类有一个静态具体方法,应用程序类使用该方法来确定应该初始化抽象类的哪个子类(根据应用程序类的输入)来执行 typeSpecific 任务。
虽然我使用 guice 将依赖项 A 注入(inject)到应用程序类中。
应用程序类中的 if else 逻辑初始化“typeOfInput”是错误的编码风格。 因为,我使用 guice 来初始化依赖项“A”,但使用“new”来初始化同一类中的子类。 有什么方法可以使用 DI 初始化“typeOfInput”吗?
对某些人来说可能看起来很愚蠢,但我是一个初学者。 提前致谢
public class Application {
private final Dependency a;
private AbstractClass typeOfInput;
private static final TypeOfInput typeA = some_constant_value;
@Inject
Application(final Dependency a){
this.a = a;
}
public doTask(final InputData inputData) {
if(AbstractClass.getInputType(inputData) == typeA){
typeOfInput = new classExtendingAbstractClassOne(a);
}else{
typeOfInput = new classExtendingAbstractClassTwo(a);
}
typeOfInput.doTypeSpecificTask();
}
}
abstract class AbstractClass{
//Concrete method
static TypeOfInput getTypeOfInput(final InputData inputData) {
//Does some processing and returns TypeOfInput value
}
abstract void doTypeSpecificTask();
}
class classExtendingAbstractClassOne extends AbstractClass {
void doTypeSpecificTask() {
//DO something relevant to this type
}
}
class classExtendingAbstractClassTwo extends AbstractClass {
void doTypeSpecificTask() {
//DO something relevant to this type
}
}
最佳答案
您的方法doTask
修改了Application
的内部状态,这带来了额外的限制,但没有任何明显的好处。现在您的 Application
实例不是线程安全的,无法安全地与多个线程一起使用。
所以您可能不需要在这里寻找应用 DI 的方法。不过,尝试将 typeOfInput
转换为局部变量是个好主意。
关于java - 使用依赖注入(inject)在方法内初始化抽象类的子类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60365813/