在这种情况下,如何正确使用泛型?

Kid*_*101 3 java generics design-patterns interface

下面是我的变压器接口

public interface Transformer<BusinessObject, O extends State>
{
    public O transformToState(BusinessObject input);
}
Run Code Online (Sandbox Code Playgroud)

这是我的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
    }
}
Run Code Online (Sandbox Code Playgroud)

这是我的另一个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
    }
}
Run Code Online (Sandbox Code Playgroud)

Both SilverBOGoldBOImplements BusinessObject是标记接口.而SilverGold扩展State.我真的觉得这个演员很烦人且多余,有没有更好的方法在这里使用泛型?还是使用更好的模式?我不想对state金银做任何改变.

Mur*_*nik 5

您也可以在输入上概括接口BusinessObject:

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...
    }
}
Run Code Online (Sandbox Code Playgroud)