我在库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字符串或实名。
您没有在任何地方调用在main
上定义的静态方法。您可以在用户类中执行以下操作:
public String getName() {
return Optional.ofNullable(name).orElse("noFound");
}
但我必须声明,这不是一个好的做法。如果name
确实是可选的,那么它应该默认为一些合理的选项,就像您的Set
所做的那样。
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#中是否有一个可为空的/可选的类,迫使我们在