当前位置: 首页 > 知识库问答 >
问题:

Java8中的可选选项保持从类返回toString方法

孙胜泫
2023-03-14

我在库Java中对java8有疑问。util。可选择的不可破坏的 我已经编写了以下代码,但我希望它将返回类的字段值。但我一直在课堂上学习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=[]}。我希望我能从用户类中得到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方法发送空参数时。我将得到空字符串,但来自ofNullable的orElse不会反应我在那里写的内容。如果你有什么办法,请告诉我。我从未得到类的字段值的noFound字符串或实名。


共有2个答案

融焕
2023-03-14

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

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

但我必须声明,这不是一个好的做法。如果name确实是可选的,那么它应该默认为一些合理的选项,就像您的Set所做的那样。

罗昊空
2023-03-14

public静态字符串getName(User-User)与您在User类中定义的方法getName无关。事实上,他们完全不同

因此,在main方法中,您甚至不调用包含选项的静态getName方法,因此它甚至不会运行。

现在,toString被调用,因为您调用了系统。出来println(用户)。在这种情况下,Java会自动调用toString。事情就是这样。

可选。ofNullable将对象引用(即使其为null)“包装”到可选包装中。

我知道,这可能是一个评论,而不是答案,但它的评论太长了。

 类似资料:
  • 我试图模拟一个对象,该对象返回一个带有Mockito的Java可选对象: 当被调用,它返回。 我希望方法返回 返回的任何原因? 方法如下: 以下是Junit:

  • 问题内容: 如何通过使用和避免返回值? 例: 问题答案: 要返回可选值的值,或者返回默认值(如果可选值没有值),则可以使用。 请注意,我重写了查找最长名称的代码:您可以直接与比较器比较每个String的长度。可以通过调用键提取器作为方法引用来获得一个这样的比较器。

  • 我知道你不能从返回,所以这个例子不起作用: 其中,可以返回有效字符串或空可选字符串。我所做的工作是: 这是更长的,并没有太大的不同,只是检查空值摆在首位。我觉得必须有一个更简洁的方式使用可选。

  • 是否有任何方法可以从NamedParameterJdbcTemplate返回可选的? 我的查询有时会返回空。所以我想要漂亮的方法来检查空。我不想做尝试捕捉空结果数据访问异常,因为这个有点丑。

  • Java1.8正在接收类,它允许我们显式地说明一个方法何时可能返回空值,并在使用它之前“强制”它的使用者验证它是否为空()。 我看到C#有,它执行类似的操作,但使用的是基本类型。它似乎用于DB查询,以区分值是否存在且为0,以及值是否不存在且为NULL。 但似乎C#的对对象不起作用,只对基本类型起作用,而Java的只对对象起作用,对基本类型不起作用。 在C#中是否有一个可为空的/可选的类,迫使我们在