なぜ、オプションのインスタンス変数のために使用されていませんか?

マイケル:

私は例について多くを読んでいるOptional使用する必要があります。

私が言う読んだページに多くのOptionalプライベートインスタンス変数のために使用すべきではありません、代わりにゲッターによって返されるべきであるが。

私は、オプションとして、プライベートインスタンス変数を持つことが、まだ有用であろうと思っているだろう。誰もが自分のコードを見た場合、彼らは代わりにnullが返される可能性かどうかを確認するためにドキュメントをチェックするので、値が空であることを見ることができます。

Scalaのヌルで使用されることはありませんし、Javaとの相互運用性のためだけ実際にそこにあります。値をnullにできるかどうかを常にオプションを使用することをお勧めします。このアプローチは、私に多くの意味があります。

ここではそれを言及するページがあります:

https://blog.joda.org/2015/08/java-se-8-optional-pragmatic-approach.html

ここではサンプルコードです。

private final String addressLine;  // never null
private final String city;         // never null
private final String postcode;     // optional, thus may be null

// normal getters
public String getAddressLine() { return addressLine; }
public String getCity() { return city; }

// special getter for optional field
public Optional<String> getPostcode() {
  return Optional.ofNullable(postcode);
}

私が見ることができる唯一の利点は、あなたがオブジェクトをシリアル化したい場合には、変数にオプションの保存されていないとして、それが今できることです。

欠点は、あなたがゲッターの戻り値の型を確認するまで、郵便番号がnullの可能性が分からないということです。あなたがコードに新しかった場合は、NULLポインタ例外を発生させ、このアドオンは、クラスを拡張逃すかもしれません。

ここではScalaのについて尋ねた質問ですOption

オプションを使用するとき

なぜオプションを使用する方法と、JavaとScalaの違いはありますか?

クシシュトフ・Atłasik:

すべてのJava開発者も、あなたは記載されているアプローチに同意しません。この確認下さいポストをロンボクの作成者によって。

私が使用しての異なるアプローチの理由と推測OptionalJavaでは、Javaのコミュニティは非常にほとんどの人がするために使用された、Javaの8までそれなしで住んでいたということであるヌル片手で(のような新しいAPIの多くfindAnyからのStream復帰)Optional、それでも標準ライブラリのメソッドの多くは、単に返すヌルをあなたはいつもとあなたの関数呼び出しをラップするかを覚えておく必要がありますので、Optional.ofNullableまたは値がnullでないかどうかを確認します。

OptionalJavaの8に追加されましたが、ため、クラスのフィールドとして使用することは推奨されOptional実装されていないSerializable(とJavaのシリアライズはアッカ、スパーク、カフカなどのような多くのフレームワークやシステムによってデフォルトの直列エンジンとして使用されています)。

一方Option非常にしっかりとScalaの標準ライブラリにバインドされています。私の知る限りでは、ないScalaの標準ライブラリのAPIが返すヌルを、しかしOption、それは使用に推奨されてヌルあなたのScalaのコード内のすべてで。あなたも、それがあればコンパイルに失敗することにプロジェクトを設定することができますnullがされて使用します

Optionまた、あるSerializableと使用への通常の練習を空にすることができる値のクラスフィールドとしてです。

あなたはJavaコードで同様のアプローチを使用する場合はチェックしてくださいオプションからVavrをそれは安全にフィールドとして使用することができ、それはまた、2つのサブクラスを有しているので、それは、シリアライズ可能だNoneSome(同様にScalaのようにOption、程度)がVavrのパターンマッチングに使用することができます。

Match(option).of(
    Case($Some($()), "defined"),
    Case($None(), "empty")
);

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=137281&siteId=1