web-dev-qa-db-ja.com

javaでブールからバイトに変換する

メソッドパラメータとしてバイト値を設定する必要があります。このメソッド内で実行されるロジックを決定するブール変数isGeneratedがあります。しかし、ブール値をブール値として直接渡すことはできますが、これは許可されておらず、Javaでキャストできません。だから私が今持っている解決策は次のようになります:

myObj.setIsVisible(isGenerated ? (byte)1 : (byte)0);

しかし、それは私には奇妙に思えます。多分これを行うためのいくつかのより良い解決策がありますか?

15
Martin

あなたの解決策は正しいです。

次のようにすることで、1つのキャストを回避できます。

myObj.setIsVisible((byte) (isGenerated ? 1 : 0 ));

さらに、実装に対する次の変更のいずれかを検討する必要があります。

  • 2つ以上の考えられる状態を考慮する必要がある場合は、メソッドをsetVisiblityState(byte state)のように変更します。

  • メソッドをsetIsVisible(boolean value)に変更してください。

18
PrR3

このソリューションを使用できます。 this 非常に便利なページで見つけました

boolean vIn = true;
byte vOut = (byte)(vIn?1:0);
4

それは奇妙ではありません。大丈夫です。奇妙なことに、型付きブール値を自己説明可能なバイトに変換する必要があります。ただし、レガシーAPIを操作するときにこれを行う必要がある場合があります。

ところで、メモリを節約したい場合は、バイトの代わりに1ビットを使用できます。そのため、ブール値ごとにビットを使用しながら、複数のブールフラグをグループ化できます。ただし、この手法は、数バイトを節約することが重要な場合にのみ、大量のデータに関連します。

1
AlexR