[英]Optional in java 8 keep returning toString method from class
我对库java.util.Optional.ofNullable;
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 类向方法 getName 发送 null 参数时。 我会得到空字符串,但是来自 ofNullable 的 orElse 不会对我在那里写的内容做出反应。 如果您知道如何修复它,请告诉我。我永远不会得到 noFound String 或 Class 字段值的真实名称。
public static string getName(User user)
与您在User
类中定义的方法getName
无关。 其实它们完全不同
因此,在main
方法中,您甚至不会在内部调用带有 Optionals 的静态getName
方法 - 因此它甚至不会运行。
现在,调用toString
是因为您调用System.out.println(user)
。 在这种情况下,Java 会自动调用toString
。 这就是发生的事情。
Optional.ofNullable
会将对该对象的引用(即使它为空)“包装”到 Optional 包装器中。
我知道,这可能是评论而不是答案,但评论太长了。
您没有在任何地方调用您在main
之上定义的静态方法。 您可以在 User 类中执行以下操作:
public String getName() {
return Optional.ofNullable(name).orElse("noFound");
}
我必须声明,这不是一个好的做法。 如果name
真的是可选的,它应该默认为一些合理的,就像你的Set
一样。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.