ли переключатель заявление быстрый способ осуществить интерпретацию оператора в Javaесть переключатель заявлении, самый быстрый способ осуществить интерпретацию оператора в Java
public boolean accept(final int op, int x, int val) {
switch (op) {
case OP_EQUAL:
return x == val;
case OP_BIGGER:
return x > val;
case OP_SMALLER:
return x < val;
default:
return true;
}
}
В этом простом примере, очевидно, да. Теперь представьте, что у вас 1000 операторов. будет ли он еще быстрее, чем иерархия классов? Есть ли порог, когда иерархия классов становится более эффективной по скорости, чем оператор switch? (в памяти, очевидно, нет)
abstract class Op {
abstract public boolean accept(int x, int val);
}
А затем один класс на одного оператора.
EDIT: Извините, я должен был быть более конкретным по виду ответов. Оператор полностью неизвестен, и я использую JDk 1.4. Нет выбора. Нет перечислений. Нет закрытий. :( Оператор выбирается пользователем среди множества многих вариантов. Для простоты, представьте графический интерфейс с 1000 операций, когда пользователь выбирает один, выбирается операционный код оператора switch. Используя иерархию классов, пользователь будет выбирать a class. Я задаю этот вопрос, потому что кто-то должен был его протестировать раньше. Мне не хочется создавать 1000 классов и 1000 фиктивных оп-кодов для его проверки. Если никто этого не сделал, я буду тестировать его и сообщать о результатах , если они могут иметь какой-либо смысл.
Не угадать. Мера. – skaffman
профайлер мощность. Тем не менее, я бы подумал о том, чтобы хранить мои операторы в массиве методов, индексированных с помощью «op». – MonoThreaded
. Enum кажется лучшей альтернативой, более читаемой и поддерживаемой с предопределенным набором операций. – Robin