如何知道布尔值是否尚未设置(或未设置)?

时间:2012-12-28 09:09:03

标签: java bit-manipulation thrift

我有一个特殊的问题。我在后端使用带有Java的Thrift和前端的php。我们有一种情况,我要求用户提供三个变量的布尔值。用户可以将它们设置为true或false,或者根本不设置它们。在后端,我将这三个值存储为char(1)字节的三位。当我检查时,在初始化时,Thrift默认为这些变量分配一个假值。

我面临的问题是,我想知道用户何时没有触摸(设置或取消设置)特定的布尔值。我的很多操作依赖于此。我不想为此在用户端进行更改,而是自己处理它。

4 个答案:

答案 0 :(得分:3)

对于这些类型的问题,您应该使用用户定义的数据类型,即枚举。

定义可以容纳三个值的枚举=> (TRUE,FALSE和NOT_SET)

这可以解决您的问题

答案 1 :(得分:0)

为了处理java中的三态布尔值,你有几个选择。

  • 使用布尔对象:null表示未设置
  • use和int:1表示true,' 0'为假和' -1'未设置
  • 使用布尔值旁边的附加标志来表示取消设置

注意:从Java 5开始,您甚至可以使用自动装箱作为第一个选项:

Boolean myFlag = null;

if (myFlag==null) {
    // unset
}
else if (myFlag) {
    // true
}
else {
    // false
}

答案 2 :(得分:0)

如果没有为变量定义任何内容,则问题是Thrift,Thrift默认为optinReqOut(可选输入,必需输出)。因此,当您反序列化时,它会将其视为缺失并设置默认值。

明确地使变量可选。

Angular-Dropdown.js

答案 3 :(得分:0)

它似乎适用于 Java: 我在 IDL 文件中定义了一个名为 flag 的变量,如下所示:

optional bool flag;

我在这样的 Java 类文件中使用它:

if (request.isSetFlag()) {
    boolean flag = request.isFlag();
    if (flag) {do something when flag is true;}
    else {do something when flag is false;}
}else{
    do something when flag is null;
}