gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 14:16:24 25 4
gpt4 key购买 nike

我对库中的 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com