Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Eclipse:使用java.util.Optional为字符串成员创建getter_Java_Eclipse_Code Generation - Fatal编程技术网

Eclipse:使用java.util.Optional为字符串成员创建getter

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是否

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

之前:

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}());