2

私には独特の問題があります。バックエンドで Java を使用し、フロントエンドで PHP を使用して Thrift を使用しています。ユーザーに 3 つの変数のブール値を求める状況があります。ユーザーは、それらを true または false に設定することも、まったく設定しないこともできます。バックエンドでは、これら 3 つの値を char(1) バイトの 3 ビットとして格納します。チェックすると、初期化時に、Thrift はデフォルトでこれらの変数に false の値を割り当てます。

私が直面している問題は、ユーザーが特定のブール値にまったく触れていない (設定または設定解除) ことを知りたいということです。私のビット操作の多くはこれに依存しています。このためにユーザー側で変更を加えたくないので、自分で処理します。

4

4 に答える 4

3

この種の問題には、ユーザー定義のデータ型、つまり列挙型を使用する必要があります。

3 つの値を保持できる列挙型を定義 => (TRUE、FALSE、NOT_SET)

これはあなたの問題を解決するでしょう

于 2012-12-28T09:24:19.620 に答える
0

変数に何も定義されていない場合の問題は Thrift です。Thrift のデフォルトは optinReqOut (Optional In、Required Out) です。したがって、デシリアライズすると、それが欠落していると見なされ、デフォルト値が設定されます。

変数を明示的にオプションにします。

https://twitter.github.io/scrooge/Semantics.html

于 2015-11-17T05:16:25.823 に答える
0

Java でトライステート ブール値を処理するには、いくつかのオプションがあります。

  • use Boolean object:null設定されていないことを意味します
  • use および int: 1true の場合、false の場合は「0」、未設定の場合は「-1」
  • ブール値の横に追加のフラグを使用して、設定解除を通知します

注:Java 5以降、次のように最初のオプションにオートボクシングを使用することもできます:

Boolean myFlag = null;

if (myFlag==null) {
    // unset
}
else if (myFlag) {
    // true
}
else {
    // false
}
于 2014-09-11T08:51:13.413 に答える