【问题标题】:Is it good to create new object if pointer is null just to get its fields or not? [closed]如果指针为空只是为了获取它的字段,是否可以创建新对象? [关闭]
【发布时间】:2021-09-17 16:39:18
【问题描述】:

这样写好不好?

UserInfo myMethod(User user) {
    user = Optional.ofNullable(user).orElse(new User())?

    String name = user.getName()
    String type = user.getType();

    return new UserInfo(name, type);
}

或者更好的使用标准方式:

UserInfo myMethod(User user) {
    if(user == null) { return null }
    
    String name = user.getName()
    String type = user.getType();

    return new UserInfo(name, type);
}

还有人可以帮助提供良好的空安全最佳实践链接吗?

【问题讨论】:

  • 这取决于为什么user首先被允许为空。
  • 处理null 的一个重要部分是定义当您将null 传递给它时会发生什么。一个简单的方法是直接禁止它(如果它发生了就抛出异常)。并且只要您的项目在这方面有一个良好的一般指导原则(例如,“除了 A、B 和 C 例外,并且需要使用 X、Y 和 Z 表示的情况外,不允许空值作为参数”,您就不需要甚至总是需要阅读该文档以了解如何处理 null
  • 您可以为 UserInfo 创建一个新的构造函数,该构造函数接受一个可能为 null 的 User 对象。

标签: java optional nullable null-safety


【解决方案1】:

第一个版本看起来有点代码味道:你返回一个UserInfo 对象,对应于一个空的User。这似乎是一种违反直觉的方法,如果未指定字段nametype,可能会导致各种验证问题。第二个版本更好,因为如果用户为空,它只返回空。另一种方法是强制调用者使用以下方法传递非空参数:

UserInfo myMethod(User user) {
    Objects.requireNonNull(user);
    ...
}

【讨论】:

    猜你喜欢
    • 2020-12-24
    • 1970-01-01
    • 1970-01-01
    • 2012-12-10
    • 1970-01-01
    • 2016-03-24
    • 1970-01-01
    • 2015-12-26
    • 2014-01-01
    相关资源
    最近更新 更多