我有一个特殊的问题。我在后端使用带有Java的Thrift和前端的php。我们有一种情况,我要求用户提供三个变量的布尔值。用户可以将它们设置为true或false,或者根本不设置它们。在后端,我将这三个值存储为char(1)字节的三位。当我检查时,在初始化时,Thrift默认为这些变量分配一个假值。
我面临的问题是,我想知道用户何时没有触摸(设置或取消设置)特定的布尔值。我的很多操作依赖于此。我不想为此在用户端进行更改,而是自己处理它。
答案 0 :(得分:3)
对于这些类型的问题,您应该使用用户定义的数据类型,即枚举。
定义可以容纳三个值的枚举=> (TRUE,FALSE和NOT_SET)
这可以解决您的问题
答案 1 :(得分:0)
为了处理java中的三态布尔值,你有几个选择。
null
表示未设置1
表示true,' 0'为假和' -1'未设置注意:从Java 5开始,您甚至可以使用自动装箱作为第一个选项:
Boolean myFlag = null;
if (myFlag==null) {
// unset
}
else if (myFlag) {
// true
}
else {
// false
}
答案 2 :(得分:0)
如果没有为变量定义任何内容,则问题是Thrift,Thrift默认为optinReqOut(可选输入,必需输出)。因此,当您反序列化时,它会将其视为缺失并设置默认值。
明确地使变量可选。
答案 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;
}