Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > hard generics :)


Автор: gelo86 19.3.2011, 17:17
Код

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. Или может совсем по другом записать дженерики в самих типах ?

Автор: rang3r 29.3.2011, 20:50
Тут тебе  Factory в помощь(собственно ты ее и реализовал), да и метод getBase() посмотри, он тебе при любом параметре отличном от ActionType.Base вернет SecondImpl или так и задумывалось?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)