4

クラスがあります

private class TouchCommand {
  private int action;
  private int x;
  private int y;
...

コマンドを実行するときは、フィールド値-null / not nullを確認し、それに応じて縦方向のアクションを生成する必要があります。GoogleGuavaのオプションを使用したい。

どの解決策が正しいですか?これ:

public boolean executeCommand() {
  Optional<Integer> optionalAction = Optional.fromNullable(action);
  ...

また:

private class TouchCommand {
  private Optional<Integer> action;
  private Optional<Integer> x;
  private Optional<Integer> y;
...

parseActionの呼び出しもnullを返す(または存在しない)可能性があるとすると、次のようになります。

TouchCommand touchCommand = new TouchCommand();
touchCommand.mAction = parseAction(xmlParser.getAttributeValue(namespace, "action"));
...

質問:

  1. そうするかどうか:メソッドparseAction(および同様のもの)はオプションを返しますか?
  2. そうするかどうか:クラスオブジェクトのフィールドオプション?
  3. そうするかどうか:クラスのフィールドをチェックして(nullになる可能性があると仮定して)オブジェクトに変換する場合オプション?

どうも。

4

1 に答える 1

19

ここでグアバの貢献者...

これらのいずれかまたはすべては問題ありませんが、一部はやり過ぎかもしれません。

一般に、このStackOverflowの回答で説明されているように、Optionalは主に2つの目的で使用されます。つまり、の意味を明確にするためnullと、メソッドの戻り値で、呼び出し元が「不在」の場合を確実に処理するためです(これは簡単です)。で忘れるnull)。私たちは確かに、すべてのnull許容値をコード内のすべての場所に置き換えることを推奨してOptionalいません-Guava自体の中でそれを行うことは確かにありません!

これの多くはあなたの決定でなければなりません-普遍的なルールはありません、それは比較的主観的な判断です、そして私はあなたの代わりに私が何をするかを決定するのに十分な文脈を持っていません-しかしあなたの文脈に基づいて提供したので、メソッドを返すことを検討しますOptionalが、おそらく他のフィールドなどは変更しません。

于 2012-07-19T13:35:21.430 に答える