Java 速度:三态布尔属性检查
如何根据布尔属性可能具有的所有三种状态来分叉三种不同的情况?这方面的Java代码看起来很简单:Java 速度:三态布尔属性检查,java,velocity,template-engine,vtl,Java,Velocity,Template Engine,Vtl,如何根据布尔属性可能具有的所有三种状态来分叉三种不同的情况?这方面的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
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在这里似乎失败了,因为规范没有空文本,为了简单起见,布尔/非空相等检查在某种程度上是可替换的。当然,有两种解决方案可以避免这种困境(见下文),但是否有一些简单/更干净的方法
#if(!$foo.boolSet)
not yet set
#else
#if($foo.bool)
set to TRUE
#else
set to FALSE
#end
#end
#if($foo.bool == $foo.theNull)
not yet set
#else
#if($foo.bool)
set to TRUE
#else
set to FALSE
#end
#end
相当于
$foo.bool == $null (in Velocity 1.6 onwards)
我想这都是关于深夜编码和一些陈旧/极简的速度用户指南
相当于
$foo.bool == $null (in Velocity 1.6 onwards)
我想这一切都是关于深夜编码和一些陈旧的/极简的速度用户指南…每当我试图把不合适的东西塞进某个地方时,我总是后悔没有一开始就转移到更合适的状态 给自己一个枚举,然后你可以明确地说它还没有准备好。明确是好的。在注释上多写几行代码真是太棒了 另一个例子是——如果您想创建一个新类或在现有类中添加更多代码,可能需要2到3个新类
只要去做就行。每当我试图把不合适的东西塞进鞋里时,我总是后悔当初没有换到更合适的状态 给自己一个枚举,然后你可以明确地说它还没有准备好。明确是好的。在注释上多写几行代码真是太棒了 另一个例子是——如果您想创建一个新类或在现有类中添加更多代码,可能需要2到3个新类
继续做吧。为什么不在构造函数中初始化布尔值呢?这样它就永远不会为null,为什么不在构造函数中初始化布尔值呢?这样,它将永远不会为null如果您使用现代版本的Velocity,您可以使用$null或$anyreferencethatnovalue。您还可以使用#elseif简化事情:
#if($foo.bool == $null)
not yet set
#elseif($foo.bool)
set to TRUE
#else
set to FALSE
#end
但说真的,这是一种黑客行为,不管你怎么说。您应该使用枚举。如果您使用的是现代版本的Velocity,您可以只使用$null或$anyreferencethatnovalue。您还可以使用#elseif简化事情:
#if($foo.bool == $null)
not yet set
#elseif($foo.bool)
set to TRUE
#else
set to FALSE
#end
但说真的,这是一种黑客行为,不管你怎么说。您应该使用枚举。我认为这会降低速度效率,但最终使用枚举类型会更安全、更干净……以什么方式效率会降低?几乎可以肯定效率更高。嗯,我知道在Android等平台上不建议使用枚举类型,因为它比直接数值选项慢。我不确定在普通java环境中两者之间的速度差异,但可能是相似的,尽管差异最终没有那么大。好吧,我认为这会降低速度效率,但最终使用枚举类型会更安全、更干净……以什么方式会降低效率?几乎可以肯定效率更高。嗯,我知道在Android等平台上不建议使用枚举类型,因为它比直接数值选项慢。我不确定在普通java环境中两者之间的速度差异,但可能是相似的,尽管这种差异最终并没有那么大。您可能想说
$foo.bool&…
Velocity用户指南肯定需要一些更新。您可能想说$foo.bool&…
Velocity用户指南肯定需要一些更新。字段有>>>三个字段有>>>三个哦,好的,我自己指出了使用旧版本的方法哦,好的,我自己也指出了使用旧版本的方法