Kid101:
Abaixo está a minha interface Transformer
public interface Transformer<BusinessObject, O extends State>
{
public O transformToState(BusinessObject input);
}
Este é um dos meus Transformer Impl
public class GoldTransformer implements Transformer<BusinessObject, Gold>
{
@Override
public Gold transformToState(BusinessObject input) {
GoldBO goldbo= (GoldBO) input; // redundant casting line
//do some transformation with BO to make it a state with some business logic
}
}
Aqui está o meu outro Transformer Impl
public class SilverTransformer implements Transformer<BusinessObject, Sliver>
{
@Override
public Gold transformToState(BusinessObject input) {
SilverBO goldbo= (SilverBO) input; // redundant casting line
// again do some transformation with BO to make it a state with some business logic
}
}
Ambos SilverBO
e GoldBO
Implementa BusinessObject
que é um interface de marcador. E Silver
e Gold
estender State
. Eu realmente encontrar o vazamento redundante chato e se existe uma maneira melhor usar os genéricos aqui? ou um padrão melhor de usar? Eu não quero fazer qualquer alteração state
ou seja, ouro e prata.
Mureinik:
Você poderia generalizar a interface na entrada BusinessObject
também:
public interface Transformer<I extends BusinessObject, O extends State> {
public O transformToState(I input);
}
public class GoldTransformer implements Transformer<GoldBO, Gold> {
@Override
public Gold transformToState(GoldBO input) {
// Code...
}
}