Eclipse:使用java.util.Optional为字符串成员创建getter
在eclipse中,您可以轻松地为类的字段创建getter和setter 之前:Eclipse:使用java.util.Optional为字符串成员创建getter,java,eclipse,code-generation,Java,Eclipse,Code Generation,在eclipse中,您可以轻松地为类的字段创建getter和setter 之前: package main; public class TestClass { private String someString; private boolean someBoolean; } 在创建getter之后(因为我们不关心这个问题中的setter): 但是如果不初始化字符串值getSomeString()将返回null,这意味着如果我想在调用对象中使用字符串,我必须首先检查null是否
package main;
public class TestClass {
private String someString;
private boolean someBoolean;
}
在创建getter之后(因为我们不关心这个问题中的setter):
但是如果不初始化字符串
值getSomeString()
将返回null
,这意味着如果我想在调用对象中使用字符串
,我必须首先检查null
是否为空
为了避免这种情况,我找到了一些解决方案:
private String someString=“”代码>
returnsomestring==null?someString:“”代码>
字符串
情况,第一种方法应该最有效:我可以轻松地将字符串
初始化为我喜欢的任何类型
上面链接的反射方法看起来不错,但处理起来有点混乱
不应使用空字符串初始化字符串的异常
空检查是可以的,但是现在使用Java8作为最后一种方法,使用Java.util.Optional
感觉是正确的方法。我会这样做:
public String getSomeString() {
return Optional.ofNullable(someString).orElse("");
}
有没有可能让eclipse的代码模板只为字符串(或所有非基本类型)创建这样的getter
使用的标准模板(请参见项目->属性->Java代码样式->代码模板->代码->Getter正文)是:
我可以换成
return java.util.Optional.ofNullable(${field}).orElse("");
这对字符串很有帮助,但对于所有其他类型,它显然是失败的。
所以我试过了
${:import(java.util.Optional)}
return Optional.ofNullable(${field}).orElse(new ${return_type}());
这是不允许的,因为变量'return\u type'未知。
此外,${:import(java.util.Optional)}
并没有像您所认为的那样得到解决(我假设这是因为代码模板或多或少只是模板中更严格的子集)。第一个是有意义的-如果${return\u type}
是一个原语,那么这可能会失败
有没有办法让eclipse为我生成这样的自定义getter?允许为一个字段创建这样的getter,但这意味着我必须为每个字段单独创建getter。也可以通过Source->generategatters/setter(或任何其他类似的方法)来完成吗
或者您认为最好还是在声明时初始化这些对象?如果可能,将字段设置为final,并在构造函数中分配它们。您将使您的类不可变。**我想,最终我希望能够用一个最终字段来更新这些值,但如果再考虑一下,我实际上可以将数据包装在一个不可变的类中,并返回对象的副本。我会试试的,非常感谢!
return java.util.Optional.ofNullable(${field}).orElse("");
${:import(java.util.Optional)}
return Optional.ofNullable(${field}).orElse(new ${return_type}());