gpt4 book ai didi

java - 速度:三态 boolean 属性检查

转载 作者:行者123 更新时间:2023-11-29 06:46:22 27 4
gpt4 key购买 nike

我如何根据 boolean 属性可能具有的所有三种状态 fork 三种不同的情况? 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 在这里似乎完全失败了,因为规范没有 null 文字,并且为了简单起见, boolean/非空相等性检查在某种程度上是可替代的。当然,有两种解决方案可以避免这种困境(见下文),但有没有更直接/更简洁的方法?

  1. 只需向 Foo 类添加一个额外的 getter,如下所示:

    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
  1. 像这样获取一些空值,

    对象 getTheNull() {返回 null;

然后 VTL 看起来像:

#if($foo.bool == $foo.theNull)
not yet set
#else
#if($foo.bool)
set to TRUE
#else
set to FALSE
#end
#end

最佳答案

如果您使用现代版本的 Velocity,您可以只使用 $null 或 $anyReferenceThatHasNoValue。您还可以使用 #elseif 来简化事情:

#if($foo.bool == $null)
not yet set
#elseif($foo.bool)
set to TRUE
#else
set to FALSE
#end

但说真的,无论你怎么切分,这都是一个 hack。您应该使用枚举。

关于java - 速度:三态 boolean 属性检查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4403577/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com