这意味着该类已初始化,但未设置变量.
样本类:
public class User {
String id = null;
String name = null;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
Run Code Online (Sandbox Code Playgroud)
实际的类是巨大的,我不想检查每个变量是否(xyz == null).
Did*_*r L 47
对于Java 8的另一个非反射解决方案,在paxdiabo的答案中,但没有使用一系列if的,将流式传输所有字段并检查空值:
return Stream.of(id, name)
.allMatch(Objects::isNull);
Run Code Online (Sandbox Code Playgroud)
这仍然很容易保持,同时避免反射锤.
ars*_*jii 31
尝试这样的事情:
public boolean checkNull() throws IllegalAccessException {
for (Field f : getClass().getDeclaredFields())
if (f.get(this) != null)
return false;
return true;
}
Run Code Online (Sandbox Code Playgroud)
尽管如果可行的话,检查每个变量可能会更好.
Mar*_*nyi 12
这可以使用生成的 Lombokequals和静态EMPTY对象轻松完成:
import lombok.Data;
public class EmptyCheck {
public static void main(String[] args) {
User user1 = new User();
User user2 = new User();
user2.setName("name");
System.out.println(user1.isEmpty()); // prints true
System.out.println(user2.isEmpty()); // prints false
}
@Data
public static class User {
private static final User EMPTY = new User();
private String id;
private String name;
private int age;
public boolean isEmpty() {
return this.equals(EMPTY);
}
}
}
Run Code Online (Sandbox Code Playgroud)
先决条件:
EMPTY对象equals(内置Java类型通常没有问题,如果是自定义类型,您可以使用Lombok)优点:
equals实现中自动检查它们int它检查0,在以下情况下boolean进行false,等等)b15*_*b15 10
如果你想要这个用于单元测试,我只使用hasNoNullFieldsOrProperties()来自assertj
assertThat(myObj).hasNoNullFieldsOrProperties();
Run Code Online (Sandbox Code Playgroud)
小智 6
流呢?
public boolean checkFieldsIsNull(Object instance, List<String> fieldNames) {
return fieldNames.stream().allMatch(field -> {
try {
return Objects.isNull(instance.getClass().getDeclaredField(field).get(instance));
} catch (IllegalAccessException | NoSuchFieldException e) {
return true;//You can throw RuntimeException if need.
}
});
}
Run Code Online (Sandbox Code Playgroud)
“最佳”是一个主观术语:-)
我只会使用检查每个变量的方法。如果您的班级已经有很多这样的东西,那么如果您执行以下操作,则大小增加不会那么大:
public Boolean anyUnset() {
if ( id == null) return true;
if (name == null) return true;
return false;
}
Run Code Online (Sandbox Code Playgroud)
如果您将所有内容保持在相同的顺序,则代码更改(以及如果您偏执的话可以使用脚本自动检查)将相对轻松。
另外(假设它们都是字符串),您基本上可以将这些值放入某种映射(例如HashMap)中,并仅保留该列表的键名列表。这样,您可以遍历键列表,检查值设置是否正确。
| 归档时间: |
|
| 查看次数: |
64747 次 |
| 最近记录: |