java - 验证多个 java 对象字段是否不为空
问题描述
我想检查必填字段(姓名、年龄和邮政编码)是否包含值或不为空。
典型的方式是
Person person = new Person();
person.setName("Cookie");
person.setAge(20);
//validation
if(person.getAge() != null && person.getName() != null){
return true;
}
在我原来的课程中,我有 20 多个字段需要检查,因此我想知道是否有更优雅的方法来执行此操作?
简单的 POJO 类示例:
public class Person {
String name;
int age;
String address;
int postcode;
public Person() {
}
public String getName() {
return this.name;
}
public void setName(String value) {
this.name = value;
}
//...etc setter and getters
}
解决方案
鉴于您所有的 getter 都返回一个引用类型(没有原语)并且您只需要检查结果是否为null
,null
您可以试试这个:
...
private final List<Supplier<Object>> m_Getters = new ArrayList<>();
...
public Person()
{
m_Getters.add( this::getName );
m_Getters.add( this::getAge ); // getAge() must return Integer, not int!!!
m_Getters.add( this::getAddress );
...
}
...
public final boolean validate()
{
return m_Getters.stream().allMatch( s -> s.get() != null );
}
您也可以从反射调用的结果中填充列表,尽管您必须为 getter 过滤该结果。谓词 forStream.allMatch()
会更复杂一些。
推荐阅读
- amazon-web-services - AWS Cognito - MFA 设置
- javascript - 如何为 AMP 项目添加自定义 javascript
- forth - 如何在 Forth 中输入数字
- angular - fb 分享动态内容问题 angular
- ios - 如何在“func renderer(SCNSceneRenderer, nodeFor: ARAnchor) -> SCNNode?”中旋转 SCNNode?
- mysql - 即使第一个表为空mysql也选择多行
- html - 触发没有按钮的模态
- python - 华氏温度到摄氏度转换器的 GUI 窗口执行中的无类型错误
- android - Android studio logcat:如何使其多行而不是水平扩展
- jwt - Identity Server 4 JWT“access_token”对 Identity Server 授权端点无效