Используя переключатель с подклассами? - PullRequest
1 голос
/ 14 апреля 2011

Можно ли использовать switch и иметь в качестве случаев разные подклассы? Я хочу использовать переключатель вместо нескольких операторов if. У меня есть абстрактный класс под названием инструкция и подклассы с разными типами. Поэтому я хочу, чтобы каждый случай был отдельным подклассом. как:

switch (instruction){
    case instruction1:
    case instruction2:
    case instruction3:
}

и т.д. как сказано, инструкции 1,2,3 являются подклассами одного и того же класса.

Ответы [ 5 ]

6 голосов
/ 14 апреля 2011

Нет, переключатель работает только с числовыми значениями и перечислениями.(В Java 7 он будет работать и со строками.)

Похоже, вам следует переопределить метод в разных подклассах ... или возможно использовать перечисления (которые могут переопределятьMethods).

Если это не поможет, пожалуйста, дайте больше информации о том, что вы пытаетесь сделать - в идеале, с примером.

4 голосов
/ 14 апреля 2011

Похоже, вы хотите использовать вместо этого полиморфизм во время выполнения.

Просто вызовите метод объекта и реализуйте его по-разному в каждом подклассе.

0 голосов
/ 15 апреля 2011

Другая возможность (отчасти хакерская) - создать перечисление в суперклассе и абстрактный метод getEnum (), который будет реализован каждым подклассом. Затем каждый из подклассов будет возвращать свой экземпляр для перечисления. Как в:

abstract class Super
{
enum Type {ONE, TWO, THREE};

abstract Type getType();
}

public class ChildOne extends Super
{
public Type getType()
{
return Type.ONE;
}
}

public class ChildTwo extends Super
{
public Type getType()
{
return Type.TWO;
}
}

Тогда вы можете сделать:

Super someClass;
switch(someClass.getType())
{
case ONE:
//domSomething
break;

case TWO:
//domSomeOtherThin
break;
//...
}
0 голосов
/ 14 апреля 2011

Расширение ответа Джона: в Java перечисления являются объектами, поэтому вы можете быть в состоянии достичь того, что вы пытаетесь сделать, используя перечисления, в зависимости от того, что именно это. Тем не менее, это, вероятно, будет не очень элегантный подход.

0 голосов
/ 14 апреля 2011

Нет, в Java вы можете использовать только целые числа в качестве условий переключения ( edit : и enums, где используется ordinal()). Решение, которое вы ищете (вместо неприятного if-else с большим количеством операторов instanceof) - это шаблон Visitor .

...