Nao tem muito como fugir disso. Agora, se vc tiver uma quantidade absurda de possibilidades, da para automatizar um pouco usando reflection. Ficaria algo assim:
Map m = new HashMap() {{
put("um", "ClasseFilha1");
put("dois", "ClasseFilha2");
put("tres", "ClasseFilha3");
put("quatro", "ClasseFilha4");
}};
ClassePai p = (ClassPai)Class.forName((String)m.get(var)).newInstance();
De qualquer forma, não tem como criar novas classes filhas sem alteração de código em outra classe. Certo?
[quote=Rafael Steil]Nao tem muito como fugir disso. Agora, se vc tiver uma quantidade absurda de possibilidades, da para automatizar um pouco usando reflection. Ficaria algo assim:
Map m = new HashMap() {{
put("um", "ClasseFilha1");
put("dois", "ClasseFilha2");
put("tres", "ClasseFilha3");
put("quatro", "ClasseFilha4");
}};
ClassePai p = (ClassPai)Class.forName((String)m.get(var)).newInstance();
Concordo plenamente com vc. A minha questão é que no momento da instanciação, é necessário saber qual classe filha instanciar e isso provavelmente vai gerar códigos com if.
Depende exatamente do contexto, mas nem semrpe você consegue evitar condicionais deste tipo, se for o caso, tenha certeza que apenas uma classe tem esse if, ou seja: que esta decisão só é tomada por um componente.