Pessoal,
Imagine que eu tenho uma classe abstrata (não sei se é essa a sintáxe, mas espero que dê para ter uma idéia):
[code]abstract class Field {
public <T> getValue() {
}
public void setValue(<T> value) {
}
}[/code]
[code]abstract class TextField extends Field {
public <T> getValue() {
// Implementação específica para TextField (String)
}
public void setValue(<T> value) {
// Implementação específica para TextField (String)
}
}[/code]
[code]abstract class NumericField extends Field {
public <T> getValue() {
// Implementação específica para NumericField (Integer)
}
public void setValue(<T> value) {
// Implementação específica para NumericField (Integer)
}
}[/code]
[code]abstract class CheckBox extends Field {
public <T> getValue() {
// Implementação específica para CheckBox (Boolean)
}
public void setValue(<T> value) {
// Implementação específica para CheckBox (Boolean)
}
}[/code]
[code]abstract class MoneyField extends Field {
public <T> getValue() {
// Implementação específica para MoneyField (Money)
}
public void setValue(<T> value) {
// Implementação específica para MoneyField (Money)
}
}[/code]
Money é um tiny type criado pela gente (por exemplo).
Consigo ter isso e ao utilizar o getValue() do NumericField obter um Integer sem precisar ficar fazendo cast por todo lado?
Não sei se isso é possível, pois não entendo como o compilador poderia fazer as garantias de tipos, mas não entendo nada de Generics mesmo…rs!
O único caso que consigo imaginar onde eu poderia precisar usar o polimorfismo seria algo do tipo:
for (Field field : getAllFields())
System.out.println("Value:" + field.getValue());
Nos demais casos eu usuário a própria classe filha, pelo menos até onde eu consigo imaginar (para o que eu preciso resolver).
Se algo do tipo for simples e funcionar, queria saber ainda se isso pode causar problemas ou limitações na vida do software caso precise evoluir essa solução.
Obrigado