2011-09-21 7 views
21

C#では、疑問符でヌルを許可する変数を使用できます。私はtrue/false/nullの結果を得たいです。私はデフォルトでnullに設定したいと思っています。ブール値はテスト結果によってtrue/falseに設定されますが、テストが実行されない場合があります。ブール値はデフォルトでfalseに設定されています。Javaはnull許容型を許可していますか?

C#の例:

bool? bPassed = null; 

ないJavaこれに似た何かを持っていますか?

+4

Javaにはnull可能な参照型がありますが、null可能なプリミティブはありません。 – BoltClock

答えて

32

代わりに、(むしろプリミティブ型通常のクラスである)箱入りBooleanクラスを使用して、または三値enumができます。

+0

対応するクラスはC#と同じように動作するので(つまり、C#バージョンは構造体であり、Javaクラスはクラスです)、「はい」です。 – ToolmakerSteve

+1

@ToolmakerSteve:いいえ。彼らは多くの点で同じではありません。 – SLaks

+1

@SLaks「複数の方法で同じではありません」いくつかの例や関連するリンクを提供できますか?ありがとう。 –

7

いいえ、Javaではprimitivesにはnull値を設定できません。この機能を使用する場合は、代わりにBooleanを使用します。

使用できる
12

Boolean b = null;

、Javaでjava.lang.Booleanオブジェクトです。その後、

とは、単純な割り当てによってまたはを設定:Javaでは

Boolean b = true; または Boolean b = false;

5

、プリミティブ型はnullにすることはできません。ただし、Booleanと友だちを使用することができます。

2

ありませんが、あなたははいあなたができるnull

7

を置く代わりに、プリミティブbooleanタイプのBooleanクラスを使用することができます。

このようなことをするために、javaにはすべてのプリミティブ型のラッパークラスがあります。変数をラッパークラスのインスタンスにする場合は、通常の変数と同様にnullを割り当てることができます。

の代わりに:あなたが使用することができます

boolean myval; 

...:

Boolean myval = null; 

あなたはこのようにそれを割り当てることができます。

myval = new Boolean(true); 

...そして、そのプリミティブな値を取得しますこのようにしてください:

if (myval.booleanValue() == false) { 
    // ... 
} 

すべてのプリミティブ型(intbooleanfloat、...)に対応するラッパー型を持っている(IntegerBooleanFloat、...)。

Javaのautoboxing機能を使用すると、コンパイラはラッパータイプをプリミティブ値に自動的に強制することがあります(逆も同様です)。しかし、コンパイラがそれを理解できない場合は、いつでも手動で行うことができます。

0

オブジェクトを使用している場合、それはあなたがプリミティブデータ型を使用している場合、それはないが理由では、Javaは、あなたが行くことができWrapper Class

2

確かに持っていることをnull

を許可しないnull

することができますブール値を使用していますが、型が「値」または「値なし」を持つことがより明白になるように、?の型がC#で行うことは多かれ少なかなくなるラッパークラスを作成するのは非常に簡単です:

public class Nullable<T> { 
    private T value; 
    public Nullable() { value = null; } 
    public Nullable(T init) { value = init; } 
    public void set(T v) { value = v; } 
    public boolean hasValue() { return value != null; } 
    public T value() { return value; } 
    public T valueOrDefault(T defaultValue) { return value == null ? defaultValue : value; } 
} 

次に、あなたがこのようにそれを使用することができます。このようなものがJava8以来の標準であることを

private Nullable<Integer> myInt = new Nullable<>(); 
... 
myInt.set(5); 
... 
if (myInt.hasValue()) 
    .... 
int foo = myInt.valueOrDefault(10); 

注:Optionalクラスを。 https://docs.oracle.com/javase/8/docs/api/java/util/Optional.html