| Код | public enum ActionType { BASE, SECOND; }
public class Param { } public class ParamImpl extends Param { } public class ParamImpl2 extends Param { }
public abstract class Base<T extends Param> { public abstract void action(T param); } public class BaseImpl extends Base<ParamImpl> { @Override public void action(ParamImpl param) { } } public class SecondImpl extends Base<ParamImpl2> { @Override public void action(ParamImpl2 param) { } }
public class App {
public void doAction(ActionType type, Param param) { getBase(type).action(param); } private Base getBase(ActionType type) { if (type == ActionType.BASE) { return new BaseImpl(); } return new SecondImpl(); } }
|
Помогите в классе App записать generic'и. Суть в том, что по ActionType выбераеться один или другой Base тип, но конкретный Base тип берет конкретный параметар. Но для юзера охото сделат один метод, где он будет подовать ActionType и параметар, и я сам возьму какой надо Base.
Понемаю, что юзер может подать несовместимый ActionType и Param. Но пусть в рунтайме вылетает ClassCastException. Или может совсем по другом записать дженерики в самих типах ? |