Как я могу разделить три разных случая в зависимости от всех трех состояний, которые могут иметь свойство Boolean? Java-код для этого выглядит просто:Скорость: три-состояние Проверка булевой способности
public class Foo {
public Boolean getBool() { return null /* this would be dynamic in RL */; }
}
// somewhere in the servlet code:
if (foo.getBool() == null) {
resp.getWriter().print("not yet set");
} else if (foo.getBool()) {
resp.getWriter().print("set to TRUE");
} else {
resp.getWriter().print("set to FALSE");
}
Velocity, кажется, эпически неудача здесь, поскольку спецификация не имеет нулевой буквальную и проверяет булево/не-нулевое равенство несколько заменимые для простоты. Конечно, есть два решения, чтобы избежать этой дилеммы (см. Ниже), но есть ли какой-то простой/более чистый способ?
просто добавить дополнительный поглотитель к классу Foo, как так:
булево isBoolSet() {вернуться getBool() = NULL;! }
и код VTL затем будет:
#if(!$foo.boolSet)
not yet set
#else
#if($foo.bool)
set to TRUE
#else
set to FALSE
#end
#end
принести некоторое нулевое значение, так как,
Объект getTheNull() {возвращение нуль; }
и VTL тогда будет выглядеть так:
#if($foo.bool == $foo.theNull)
not yet set
#else
#if($foo.bool)
set to TRUE
#else
set to FALSE
#end
#end
Ну, я думаю, что это будет менее эффективная скорость, но в конечном итоге было бы намного безопаснее и чище использовать тип перечисления ... – 2010-12-09 22:11:04
Каким образом это было бы менее эффективно? Почти наверняка более эффективно. – 2010-12-09 22:15:21
Ну, я знаю, что использование типов перечислений не рекомендуется на таких платформах, как Android, потому что оно медленнее, чем прямые числовые значения. Я не уверен в разнице скоростей между ними в нормальной среде Java, но, возможно, это похоже, хотя разница в конечном итоге не такая резкая. – 2010-12-10 01:08:15