Java 8 可选用法

标签 java java-8 option-type

<分区>

我最近发现了 java 8 中的 Optional 类型,并开始在我的最新项目中使用它。我像这样使用它:

public class User{
    private int id;
    private String email;
    private Optional<String> mobile;
    public User(int id, String email, Optional<String> mobile){
       ...
    }
    public int id(){...}
    public int email(){...}
    public Optional<String> mobile(){...}
}

今天,当我看到一些帖子时,我正在探索更多关于 Optional 的内容,这些帖子明确指出在返回类型以外的地方使用 Optional 是一种不好的做法。从多个来源验证后,我更改了我的代码:

public class User{
    private int id;
    private String email;
    private String mobile;
    public User(int id, String email, String mobile){
       ...
    }
    public int id(){...}
    public int email(){...}
    public Optional<String> mobile(){
        return Optional.ofNullable(mobile);
    }
}

这是一个可接受的解决方案吗?具体来说,我将一些方法签名更改为 T,然后在方法内部将 T 转换为 Optional.ofNullable(t),以便我可以使用 ifPresent、orElse、filter、map 等方法。

最佳答案

我认为您返回 Optional.ofNullable 的替代实现很好。

在创建类 Serializable 时,我必须自己进行此更改。正如 Stuart Marks 在 his answer 中所说的那样, 它增加了很少的值(value)使字段可选(您总是可以使用 mobile() 而不是 mobile 来获取字段的 Optional View ).

关于Java 8 可选用法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27646904/

相关文章:

java - 在 ArrayList Java 中搜索特定对象

java - Java中使用Optional类时,对象无法转换为字符串

javascript正则表达式可选字符

java - 在Eclipse Luna中安装STS(Spring)时出错

java - 获取两点之间的一组坐标?

java - JDBC+MySQL : Retry transaction in case of lockwait or deadlock

Java - SAM类型优化

java - 哪个版本的 Eclipse 支持 Java 8?

java - 使用 Java 8 Stream API 进行计数和排序

swift - 将显式展开的枚举类型的属性与常量进行比较