Можно ли типизировать объект интерфейса во время выполнения в Java, используя внедрение зависимостей?JAVA

Программисты JAVA общаются здесь
Anonymous
Можно ли типизировать объект интерфейса во время выполнения в Java, используя внедрение зависимостей?

Сообщение Anonymous »

Код: Выделить всё

public interface Animal {
void speak();
}

public class Dog implements Animal{
void speak (){
System.out.println("This is dog.")
}
}

public class Cat implements Animal{
void speak (){
System.out.println("This is cat.")
}
}

@Module
public class Module{

@Provides
@Named("Dog")
static Animal providesDog() {
return new Dog();
}

@Provides
@Named("Cat")
static Animal providesCat() {
return new Cat();
}
}

public class AnimalOrchestrator {

@Inject
Animal animal;

public void speak(String type) {

if(type.equals("dog")
(Dog) animal.speak();
else
(Cat) animal.speak();

}
}
Возможен ли такой вид приведения типов, когда во время выполнения мы определяем, какой объект Dog/Cat должен транслироваться как объект Animal?
Ниже приведены некоторые другие способы использования которым достигается такая функциональность.

Код: Выделить всё

public class AnimalOrchestrator {

@Inject
Dog dog;

@Inject
Cat cat;

public void speak(String type) {

if(type.equals("dog")
dog.speak();
else
cat.speak();

}
}
Недостаток приведенного выше кода заключается в том, что нам нужно создать объекты собаки и кошки, хотя будет использоваться только один из них.
Другой способ следующий:

Код: Выделить всё

public class AnimalOrchestrator {

Animal animal;

public void speak(String type) {

if(type.equals("dog"){
animal = new Dog();
animal.speak();
} else {
animal = new Cat();
animal.speak();
}
}
}
При этом нам нужно создать этот объект, используя новый оператор, которого я хотел избежать, чтобы использовать внедрение зависимостей.
Это первое решение даже возможно? Если да, то какой из них лучше?

Подробнее здесь: https://stackoverflow.com/questions/785 ... dependency

Вернуться в «JAVA»