私はCからJavaを学んでいますが、boolean
タイプの言語の興味深い違いを見つけました。 Cにはbool
/ean
がないため、ブール型ロジック(_0 == false
_)を表すために数値型を使用する必要があります。
私はJavaでは動作しないと思います:
_int i = 1;
if (i)
System.out.println("i is true");
_
型キャストによる条件の変更も行いません:
_if ((boolean)i)
_
そのため、次のようなことを行います:
_if ( i != 0 )
_
int
型に対してC風のロジックチェックを行う他の方法はありますか?このような非ブール型でブール論理を許可するJavaトリックがあるかどうか疑問に思っています。
編集:
上記の例は非常に単純化されており、狭い思考範囲に収まります。元々質問をしたとき、関数呼び出しからの非ブール戻り値についても考えていました。たとえば、Linux fork()
呼び出し。 int
自体は返しませんが、次のように条件に数値の戻り値をうまく使用できます。
_if( fork() ) {
// do child code
_
これにより、子に対して条件付きでコードを処理できますが、親に対しては処理しません(または、エラーの結果が負の場合)。
だから、現時点では十分なJavaが良い "Java"の例を与えるには分からないが、それは私の本来の意図だった。
Javaでは、
if ( i != 0 )
整数i
がzero
と異なるかどうかを確認する慣用的な方法です。
i
がフラグとして使用される場合、boolean
型ではなく、int
型である必要があります。
boolean
型を使用しないのはなぜですか?これは、潜在的に問題のある整数/ブール型の融合なしで、期待どおりに機能します。
private boolean isValid;
...
if (!isValid) {
...
}
これは慣用的なJavaアプローチです。サードパーティのライブラリはこれを使用し、APIのコンシューマもそれを使用し、期待します。使用するライブラリがbooleans
、そして、あなたはints
をbooleans
として扱うだけです。
FROM [〜#〜] jls [〜#〜] :
ブール型には、ASCII文字。から形成されるブールリテラルtrueおよびfalseで表される2つの値があります。
したがって、答えはありません。唯一の
if ( i != 0 )
Javaでは、条件はブール型である必要があります。そうでない場合、式にすることはできません。
if( i )
許可されていません。
Trueまたはfalseでなければなりません。
Apache common-lang から BooleanUtils を試してください。
BooleanUtils.toBoolean(0) = Boolean.FALSE
BooleanUtils.toBoolean(1) = Boolean.TRUE
BooleanUtils.toBoolean(2) = Boolean.TRUE
おそらくこのようなもの:
int i == 0 ? false : true;
またはその逆:
int i == 1 ? true : false
...
ブールの代わりにintを使用することを主張する場合は、メソッドを使用して変換するだけです
class BooleanHelper
{
public static boolean toBoolean (int pVal) {
return pVal != 0;
}
...
}
// apply
if (BooleanHelper.toBoolean(i)) { // BooleanHelper could be avoided using static imports...
ただし、使用するだけ
if (i != 0) {
まだ短くて明確です。
そのようなものを試すことができます。ブール値i = true; if(i)System.out.println( "i is true");
整数ではなくブール値として初期化するだけです。