Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> hard generics :) 
:(
    Опции темы
gelo86
Дата 19.3.2011, 17:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 388
Регистрация: 26.10.2007

Репутация: нет
Всего: нет



Код

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

Это сообщение отредактировал(а) gelo86 - 19.3.2011, 17:20
PM MAIL   Вверх
rang3r
Дата 29.3.2011, 20:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 61
Регистрация: 2.4.2009

Репутация: нет
Всего: нет



Тут тебе  Factory в помощь(собственно ты ее и реализовал), да и метод getBase() посмотри, он тебе при любом параметре отличном от ActionType.Base вернет SecondImpl или так и задумывалось?
PM MAIL Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0411 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.