注解实际上做了两件事:
添加了一个实例化对象的静态方法;
添加了一个私有构造方法服务于该静态方法,在需要自定义的字段上面加入@NonNull后,这些字段就会按照属性在类中声明的先后顺序作为该方法的形参,同时会对这些字段做非空验证,如果为空就会报空指针异常,这是一个坑,需要注意。