C#では、疑問符でヌルを許可する変数を使用できます。私はtrue/false/nullの結果を得たいです。私はデフォルトでnullに設定したいと思っています。ブール値はテスト結果によってtrue/falseに設定されますが、テストが実行されない場合があります。ブール値はデフォルトでfalseに設定されています。Javaはnull許容型を許可していますか?
C#の例:
bool? bPassed = null;
ないJavaこれに似た何かを持っていますか?
C#では、疑問符でヌルを許可する変数を使用できます。私はtrue/false/nullの結果を得たいです。私はデフォルトでnullに設定したいと思っています。ブール値はテスト結果によってtrue/falseに設定されますが、テストが実行されない場合があります。ブール値はデフォルトでfalseに設定されています。Javaはnull許容型を許可していますか?
C#の例:
bool? bPassed = null;
ないJavaこれに似た何かを持っていますか?
号
代わりに、(むしろプリミティブ型通常のクラスである)箱入りBoolean
クラスを使用して、または三値enum
ができます。
対応するクラスはC#と同じように動作するので(つまり、C#バージョンは構造体であり、Javaクラスはクラスです)、「はい」です。 – ToolmakerSteve
@ToolmakerSteve:いいえ。彼らは多くの点で同じではありません。 – SLaks
@SLaks「複数の方法で同じではありません」いくつかの例や関連するリンクを提供できますか?ありがとう。 –
いいえ、Javaではprimitivesにはnull値を設定できません。この機能を使用する場合は、代わりにBooleanを使用します。
使用できる:
Boolean b = null;
、Javaでjava.lang.Boolean
オブジェクトです。その後、
とは、単純な割り当てによって真または偽を設定:Javaでは
Boolean b = true;
または Boolean b = false;
、プリミティブ型はnullにすることはできません。ただし、Boolean
と友だちを使用することができます。
ありませんが、あなたははいあなたができるnull
を置く代わりに、プリミティブboolean
タイプのBoolean
クラスを使用することができます。
このようなことをするために、javaにはすべてのプリミティブ型のラッパークラスがあります。変数をラッパークラスのインスタンスにする場合は、通常の変数と同様にnull
を割り当てることができます。
の代わりに:あなたが使用することができます
boolean myval;
...:
Boolean myval = null;
あなたはこのようにそれを割り当てることができます。
myval = new Boolean(true);
...そして、そのプリミティブな値を取得しますこのようにしてください:
if (myval.booleanValue() == false) {
// ...
}
すべてのプリミティブ型(int
、boolean
、float
、...)に対応するラッパー型を持っている(Integer
、Boolean
、Float
、...)。
Javaのautoboxing機能を使用すると、コンパイラはラッパータイプをプリミティブ値に自動的に強制することがあります(逆も同様です)。しかし、コンパイラがそれを理解できない場合は、いつでも手動で行うことができます。
オブジェクトを使用している場合、それはあなたがプリミティブデータ型を使用している場合、それはないが理由では、Javaは、あなたが行くことができWrapper Class
確かに持っていることを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
Javaにはnull可能な参照型がありますが、null可能なプリミティブはありません。 – BoltClock