java - java 8中的 optional 不断从类返回toString方法

标签 java java-8 optional

我对库中的 Java 8 有疑问 java.util.Optional.ofNullable;我已经编写了以下代码,但我希望它会返回类字段的值。但我不断从类里面获取 toString 方法。执行此代码的原因可能是什么。

import static java.util.Optional.ofNullable;

public class Main12 {

    public static String getName(User user){
        return ofNullable(user).map(User::getName).orElse("noFound");
    }

    public static void main(String[] args) {
        User user = new User();
        user.setName("ew");
        System.out.println(user);
    }

}
我从终端得到的结果是 User{id=null, name='ew', age=0, roles=[]} .我希望我能从 User 类中获取 name 字段的值。
public class User {
    private Long id;
    private String name;
    private int age;
    private Set<Role> roles = new HashSet<>();

    public User(long id, String name, int age) {
        this.id = id;
        this.name = name;
        this.age = age;
    }
    public User(){

    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public Set<Role> getRoles() {
        return roles;
    }

    public void setRoles(Set<Role> roles) {
        this.roles = roles;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", age=" + age +
                ", roles=" + roles +
                '}';
    }
}
用户类字段和方法。当我从 Main12 类将 null 参数发送到方法 getName 时。我会得到 null String 但来自 ofNullable 的 orElse 不会对我在那里写的内容使用react。如果您知道如何解决它,请告诉我。我从来没有得到 noFound String 或 Class 的字段值的真实名称。

最佳答案

public static string getName(User user)与方法无关getName您在 User 中定义的类(class)。
事实上他们完全不同
所以在 main您甚至不调用静态 getName 的方法内部带有 Optionals 的方法 - 所以它甚至不会运行。
现在,toString被调用是因为你调用了 System.out.println(user) .在这种情况下,Java 会自动调用 toString .这就是发生的事情。Optional.ofNullable将对对象的引用(即使它为 null)“包装”到 Optional 包装器中。
我知道,这可能是评论而不是答案,但评论太长了。

关于java - java 8中的 optional 不断从类返回toString方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63543755/

相关文章:

java - 在 AWS EMR 自定义 jar 应用程序中指定其他 jar

java - 确保对某种类型的所有已声明和继承的成员调用方法

java - EOFExceptionon 读取 UDP

java - JavaFx 中 BACKSPACE 的键码事件

java - Java中是否有任何一致的(单调的)时钟实现?

c++ - 如何使用 optional 元素初始化 C++17 对 vector

java - IE11 上的 Selenium 自动化(企业模式)

java-8 - Jetty 9.4 给出 ArrayIndexOutOfBoundsException

java-8 - 如果其中的代码有任何异常,如何使用 Optional 返回空?

typescript - TypeScript 中的破折号问号语法是什么?