Гуава по желанию. Как правильно использовать

у меня есть класс

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

При выполнении команды необходимо сверять значения поля - null/not null, и в зависимости от этого производить продольное действие. Я хочу использовать параметры Google Guava.

Какое решение правильное? это:

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

or:

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 (и аналогичный) возвращает Optional ?
  2. нужно ли делать так: поле объектов класса Необязательный?
  3. стоит ли делать так: при проверке полей класса (предполагая, что они могут быть нулевыми) преобразовывать их в объекты Optional ?

Спасибо.


person Aleksandr    schedule 19.07.2012    source источник


Ответы (1)


Автор гуавы здесь...

Любая или все эти вещи хороши, но некоторые из них могут быть излишними.

Как правило, как обсуждалось в этом ответе StackOverflow, Optional в основном используется для двух целей: чтобы было понятнее, что вы хотели бы подразумевается под null, а в методе возвращаются значения, чтобы убедиться, что вызывающая сторона позаботится об «отсутствующем» случае (о котором легче забыть с null). Мы конечно не выступаем за замену всех значений, допускающих значение NULL, на Optional везде в вашем коде — мы, конечно же, не делаем этого в самой Guava!

Многое из этого должно быть вашим решением — универсального правила не существует, это относительно субъективное суждение, и у меня нет достаточного контекста, чтобы определить, что бы я сделал на вашем месте — но исходя из того, в каком контексте вы… ve предоставил, я бы подумал о том, чтобы методы возвращали Optional, но, вероятно, не стал бы менять какие-либо другие поля или что-то еще.

person Louis Wasserman    schedule 19.07.2012
comment
Я просто подумал, что делать поле класса необязательно, это неправильно. Если это тоже правильно, то (я думаю) хранить значения, которые могут быть нулевыми, проще, чем каждый раз преобразовывать значение в Optional, если нужна проверка. - person Aleksandr; 19.07.2012
comment
Я имею в виду, не то чтобы это не сработало. Но Optional влечет за собой собственные накладные расходы, которые могут быть нежелательными. Здесь действительно намного лучше оптимизировать для удобства обслуживания и читабельности кода. - person Louis Wasserman; 19.07.2012