在Java8中是可选的保持从类返回tostring方法

dba5bblo  于 2021-07-06  发布在  Java
关注(0)|答案(2)|浏览(295)

我在图书馆有关于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不响应我在那里写的内容。如果你有什么想法,请告诉我。我从来没有找到字符串或类的字段值的真实名称。

fzwojiic

fzwojiic1#

public static string getName(User user) 与方法无关 getName 你已经定义了 User 班级。事实上他们完全不同
所以在 main 方法你甚至不调用静态 getName 方法中包含选项-因此它甚至不会运行。
现在, toString 因为你打电话 System.out.println(user) . 在这种情况下,java会自动调用 toString . 事情就是这样。 Optional.ofNullable 将对象的引用(即使为null)“ Package ”到可选 Package 器中。
我知道,这可能是一个评论,而不是答案,但它有点太长的评论。

iugsix8n

iugsix8n2#

您没有调用您在上面定义的静态方法 main 任何地方。您可以在用户类中执行以下操作:

public String getName() {
    return Optional.ofNullable(name).orElse("noFound");
}

我不得不说这不是一个好的做法。如果 name 实际上是可选的,它应该默认为一些合理的东西,比如 Set 做。

相关问题