看题主的问题,虽然直接每个对象每个字段都去get判空是可以,但是这样的代码明显不方便维护,而且可能越加越多,因此我分析主要需要解决以下两个问题
每个实体类中的字段并不是所有字段都需要判空,所以这里会有修改的隐藏需求(增加或减少需要判断的字段)
如果解决第一步,能将需要校验的字段筛选出来,那剩下的问题就是如何将所有的字段值取出来加以判断
针对这两个问题,我认为
问题1可以通过自定义注解来标示一下需要校验的字段,用注解标示字段后,在需要增加或减少字段校验,只需要修改对应实体类里的属性注解即可,不需要再修改校验类
问题2,取值出来,自然想到是反射了
这就有了一下的代码:
首先是标注的注解EmptyCheck
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface EmptyCheck {
}
然后注解到一个实体类A中的字段里,其中a1,a3字段需要判空,a2字段不需要
@Getter
@Setter
public class A {
@EmptyCheck
private String a1;
private String a2;
@EmptyCheck
private String a3;
}
以上是准备工作,接下来就是写如何校验了,我采用了一个校