我在图书馆有关于Java8的问题 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=[]}
。我希望能从用户类中获取名称字段的值。
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时。我将得到空字符串,但orelse from of nullable不响应我在那里写的内容。如果你有什么想法,请告诉我。我从来没有找到字符串或类的字段值的真实名称。
2条答案
按热度按时间fzwojiic1#
public static string getName(User user)
与方法无关getName
你已经定义了User
班级。事实上他们完全不同所以在
main
方法你甚至不调用静态getName
方法中包含选项-因此它甚至不会运行。现在,
toString
因为你打电话System.out.println(user)
. 在这种情况下,java会自动调用toString
. 事情就是这样。Optional.ofNullable
将对象的引用(即使为null)“ Package ”到可选 Package 器中。我知道,这可能是一个评论,而不是答案,但它有点太长的评论。
iugsix8n2#
您没有调用您在上面定义的静态方法
main
任何地方。您可以在用户类中执行以下操作:我不得不说这不是一个好的做法。如果
name
实际上是可选的,它应该默认为一些合理的东西,比如Set
做。