Eclipse:使用java.util.Optional为String成员创建getter

时间:2015-02-18 12:00:36

标签: java eclipse code-generation

在eclipse中,您可以轻松地为类的字段创建getter和setter。

在:

package main;

public class TestClass {
    private String someString;
    private boolean someBoolean;
}

创建getter之后(因为我们不关心这个问题中的setter):

package main;

public class TestClass {
    private String someString;
    private boolean someBoolean;

    /**
     * @return the someString
     */
    public String getSomeString() {
        return someString;
    }

    /**
     * @return the someBoolean
     */
    public boolean isSomeBoolean() {
        return someBoolean;
    }
}

但是如果你没有初始化StringgetSomeString()将返回null,这意味着如果我想在调用对象中使用String,我有始终先检查是否为null

为了避免这种情况,我找到了一些解决方案:

  1. 在声明时立即初始化字符串:private String someString = "";
  2. Reflections
  3. return someString == null ? someString : "";
  4. 使用java.util.Optional
  5. 可能还有很多种方法......
  6. 在写这个问题时,我发现可能对于简单的String情况,第一种方法应该效果最好:我可以轻松地将String初始化为我喜欢和完成的任何内容。

    上面提到的反思方法似乎还可以,但处理起来有点混乱 不应使用空字符串初始化String的异常。

    null检查没问题,但现在使用Java 8的最后一种方法,使用java.util.Optional感觉就像这样做的正确方法。我会这样做:

    public String getSomeString() {
        return Optional.ofNullable(someString).orElse("");
    }
    

    是否有可能让eclipse的代码模板只为Strings(或所有非原始类型)创建这样的getter?

    使用的标准模板(参见Project - > Properties - > Java Code Style - > Code Templates - > Code - > Getter body)是:

    return ${field};
    

    我可以用

    替换它
    return java.util.Optional.ofNullable(${field}).orElse("");
    

    对字符串有帮助 - 但对于所有其他类型,它显然会失败。 所以我试过

    ${:import(java.util.Optional)}
    return Optional.ofNullable(${field}).orElse(new ${return_type}());
    

    这是不允许的,因为Variable 'return_type' is not known.并且${:import(java.util.Optional)}未解决为the help让你相信(我认为这是因为代码模板只是模板的更严格的子集,或多或少)。第一个是有道理的 - 如果${return_type}是原始的,这可能会失败。

    有没有办法让eclipse为我生成这样的自定义getter? This answer允许为一个字段创建这样的getter,但这意味着我必须分别为每个字段执行此操作。是否也可以通过Source完成它 - >生成getter / setter(或任何其他类似的方法)?

    或者你认为最好在他们的声明中初始化这些对象吗?

0 个答案:

没有答案