Как я могу установить входной аргумент, который будет использоваться в объявлении класса? - PullRequest
1 голос
/ 15 сентября 2011

У меня есть абстрактный класс A с 1 методом с именем public int get(int x, int y).

Классы B, C, D имеют 1 метод, которые все одинаковы и распространяются на абстрактный класс A.

В классе Car конструктор Car получает строковый аргумент type, который должен использоваться для определения, какой из B, C, D должен использоваться в классе.

Очевидно, я использую для этого условные операторы if...else на основе type.

Так что коды выглядят как

if(type.equals("B")){
    A = new B();
} else if(type.equals("C")){
    A = new C();
}  //and so on..

Есть ли какой-нибудь элегантный способ использовать строковый аргумент, чтобы решить, какой из 3 классов использовать?

Ответы [ 2 ]

2 голосов
/ 15 сентября 2011

Вы можете использовать интерфейс / абстрактный класс в качестве аргумента в конструкторе вместо использования String.

public Car(A a) { this.a = a; }

А потом в другом месте:

B b = new B();
new Car(b);

Это называется внедрение зависимостей .

1 голос
/ 15 сентября 2011

Вы можете использовать Class.forName(String), чтобы получить Class объект, а затем создать его экземпляр, используя newInstance()

...