Как мне разветвить три разных случая в зависимости от всех трех состояний, которые может иметь логическое свойство?Код 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");
}
Кажется, что скорость здесь эпически терпит неудачу, так как спецификация не имеет нулевого литерала, а проверки на логическое / ненулевое равенство несколько удобны для простоты.Конечно, есть два решения, чтобы избежать этой дилеммы (см. Ниже), но есть ли какой-то простой / понятный способ?
просто добавьте дополнительный метод получения в класс Foo, например, так:
boolean isBoolSet () {return getBool ()! = Null;}
, и тогда код VTL будет:
#if(!$foo.boolSet)
not yet set
#else
#if($foo.bool)
set to TRUE
#else
set to FALSE
#end
#end
извлечь некоторое нулевое значение, например,
Object getTheNull () {return null;}
, и тогда VTL будет выглядеть так:
#if($foo.bool == $foo.theNull)
not yet set
#else
#if($foo.bool)
set to TRUE
#else
set to FALSE
#end
#end