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