注解属于比较高级的Java开发技术,前面介绍的内置注解专用于编译器检查代码,另外一些注解则由各大框架定义与调用,像Web开发常见的Spring框架、Mybatis框架,Android开发常见的ButterKnife框架等等,都使用了大量的注解。为了更好地弄清注解的应用原理,接下来不妨尝试自定义注解,并在实际开发中对自定义的注解加以运用。
之前介绍异常预防的时候,为了避免出现空指针异常,可谓是八仙过海各显神通,一路试验了多项新技术。其中校验某个字段非空尤其是个难点,案例中的苹果类共有四个字段,包括名称、颜色、重量、价格等,倘若要求这些字段均非空值才算有效记录的话,就得四个字段一一判断过去。那么采取for循环进行非空检查的常规代码示例如下:
// 常规的for循环校验,对每个对象及其每个属性都进行空指针判断
private static void getRedAppleByFor(List<Apple> list) {
List<Apple> redAppleList = new ArrayList<Apple>();
if (list != null) { // 判断清单非空
for (Apple item : list) {
// 对每个字段依次进行空指针判断
if (item!=null && item.getName()!=null && item.getColor()!=null
&& item.getWeight()!=null && item.getPrice()!=null) {
if (item.isRedApple()) { // 判断是否为红苹果
redAppleList.add(item);
}
}
}
}
System.out.println("常规的For循环校验之后的红苹果清单=" + redAppleList.toString());
}
从以上代码可见,对每个字段依次进行空指针判断,这里的条件语句拖得老长。倘若给苹果类新增一个字段,那么此处的条件语句还得补上新字段的非空校验。即使采用Java8引入的可选器Optional,也没有更好的办法,如此窘境简直叫人束手无策。
如今有了注解技术,号称可以自动检查代码,总算出现解决问题的一缕曙光。具体的处理过程大致分为四个步骤:自定义新的非空注解、给非空字段添加非空注解、利用反射机制校验被非空