在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;
}
}
但是如果你没有初始化String
值getSomeString()
将返回null
,这意味着如果我想在调用对象中使用String
,我有始终先检查是否为null
。
为了避免这种情况,我找到了一些解决方案:
private String someString = "";
return someString == null ? someString : "";
在写这个问题时,我发现可能对于简单的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(或任何其他类似的方法)?
或者你认为最好在他们的声明中初始化这些对象吗?