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


Автор: kren 8.11.2006, 21:15
Добрый день,

есть у меня метод:

Код

    protected Image iconChoose(String fileType) {

        Image typeIcon = null;

        if ("mp3".equals(fileType) {

            typeIcon = iconCache.stockImages[iconCache.typeAudio];

        } else if ("doc".equals(fileType)) {

            typeIcon = iconCache.stockImages[iconCache.typeDoc];

         } else if ....
                    ....
         return typeIcon;
         }


Tак вот, этих иф елсов скажем достаточно много и метод получается довольно громозтким и сложным. 
Я тут думал, как бы это переделать в switch c case'aми. Но вот в switch параметры мозно задавать только цифрами.
Так вот, что бы вы посоветовали? 

Автор: y3u 8.11.2006, 21:28
проще всего это дело в хешмап распихать и сразу доставать по расширению нужный икон

Автор: maxim1000 8.11.2006, 21:31
учитывая схожесть не только условий (отличие только в строке), но и действий внутри блока, можно было бы каким-то образом задать соответствие между строкой и тем, что передаётся в квадратных скобках
в C++ для таких вещей можно использовать std::map
в Java тоже, наверняка, такое есть

Автор: powerOn 8.11.2006, 21:34
Создай HashMap в котором ключи строки "mp3", "doc" ... а значения iconCache.typeAudio, iconCache.typeDoc. Потом из него дергай нужные значение, что то в стиле:

Код

HashMap hm = new HashMap();

hm.put("doc", iconCache.typeDoc);
hm.put("mp3", iconCache.typeAudio);
....

if (hm.containsKey(fileType) {
iconCache.stockImages[ hm.get(fileType) ];
}



Добавлено @ 21:36 
опередили....  smile  smile 

Автор: kren 8.11.2006, 21:55
Спасиба огромное, все работает, проблема решена smile

Автор: bytes 8.11.2006, 23:12
Цитата
Но вот в switch параметры мозно задавать только цифрами.

не только...
interface, enum

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