Como faço para usar corretamente os genéricos neste caso?

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 SilverBOe GoldBOImplementa BusinessObjectque é um interface de marcador. E Silvere Goldestender 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 stateou seja, ouro e prata.

Mureinik:

Você poderia generalizar a interface na entrada BusinessObjecttambé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...
    }
}

Acho que você gosta

Origin http://43.154.161.224:23101/article/api/json?id=197698&siteId=1
Recomendado
Clasificación