番石榴可选。如何使用正确

时间:2012-07-19 13:21:24

标签: java guava optional

我有一个班级

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);
  ...

或:

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. 是否这样做:在检查类的字段时(假设它们可以为null)将它们转换为对象可选吗?
  4. THX。

1 个答案:

答案 0 :(得分:19)

番石榴贡献者......

任何或所有这些都很好,但其中一些可能有点过分。

一般来说,正如this StackOverflow answer中所讨论的,Optional主要用于两件事:通过null更清楚地表达的含义,并在方法中返回值以确保调用者处理“缺席”情况(使用null更容易忘记)。我们肯定不提倡用代码中的Optional替换每个可空值 - 我们当然不会在Guava本身中这样做!

这很多都是你的决定 - 没有普遍的规则,这是一个相对主观的判断,我没有足够的背景来确定我在你的位置做什么 - 但是基于什么您提供的上下文,我会考虑让方法返回Optional,但可能不会更改任何其他字段或任何内容。