sneaky visit( 二 )

  • @Data:注解在类上 , 相当于同时使用了 @ToString、@EqualsAndHashCode、@Getter、@Setter 和 @RequiredArgsConstrutor 这些注解 , 对于 POJO 类十分有用;
  • @Value:用在类上 , 是 @Data 的不可变形式 , 相当于为属性添加 final 声明 , 只提供 getter 方法 , 而不提供 setter 方法;
  • @Builder:用在类、构造器、方法上 , 为你提供复杂的 builder APIs , 让你可以像如下方式一样调用Person.builder().name("xxx").city("xxx").build();
  • @SneakyThrows:自动抛受检异常 , 而无需显式在方法上使用 throws 语句;
  • @Synchronized:用在方法上 , 将方法声明为同步的 , 并自动加锁 , 而锁对象是一个私有的属性 LOCK , 而 Java 中的 synchronized 关键字锁对象是 this , 锁在 this 或者自己的类对象上存在副作用 , 就是你不能阻止非受控代码去锁 this 或者类对象 , 这可能会导致竞争条件或者其它线程错误;
  • @Getter(lazy=true):可以替代经典的 Double Check Lock 样板代码;
  • @Log:根据不同的注解生成不同类型的 log 对象 , 但是实例名称都是 log , 有六种可选实现类 @CommonsLog Creates log = org.apache.commons.logging.LogFactory.getLog(LogExample.class); @Log Creates log = java.util.logging.Logger.getLogger(LogExample.class.getName()); @Log4j Creates log = org.apache.log4j.Logger.getLogger(LogExample.class); @Log4j2 Creates log = org.apache.logging.log4j.LogManager.getLogger(LogExample.class); @Slf4j Creates log = org.slf4j.LoggerFactory.getLogger(LogExample.class); @XSlf4j Creates log = org.slf4j.ext.XLoggerFactory.getXLogger(LogExample.class);
  • 它们的具体使用如下:
    ① val 使用val sets = new HashSet();// 相当于final Set sets = new HashSet<>();② NonNull 使用public void notNullExample(@NonNull String string) {string.length();}// 相当于public void notNullExample(String string) {if (string != null) {string.length();} else {throw new NullPointerException("null");}}③ Cleanup 使用public static void main(String[] args) {try {@Cleanup InputStream inputStream = new FileInputStream(args[0]);} catch (FileNotFoundException e) {e.printStackTrace();}// 相当于InputStream inputStream = null;try {inputStream = new FileInputStream(args[0]);} catch (FileNotFoundException e) {e.printStackTrace();} finally {if (inputStream != null) {try {inputStream.close();} catch (IOException e) {e.printStackTrace();}}}}④ Getter/Setter 使用@Setter(AccessLevel.PUBLIC)@Getter(AccessLevel.PROTECTED)private int id;private String shap;⑤ ToString 使用@ToString(exclude = "id", callSuper = true, includeFieldNames = true)public class LombokDemo {private int id;private String name;private int age;public static void main(String[] args) {// 输出 LombokDemo(super=LombokDemo@48524010, name=null, age=0)System.out.println(new LombokDemo());}}⑥ EqualsAndHashCode 使用@EqualsAndHashCode(exclude = {"id", "shape"}, callSuper = false)public class LombokDemo {private int id;private String shap;}⑦ NoArgsConstructor、RequiredArgsConstructor、AllArgsConstructor 使用@NoArgsConstructor@RequiredArgsConstructor(staticName = "of")@AllArgsConstructorpublic class LombokDemo {@NonNullprivate int id;@NonNullprivate String shap;private int age;public static void main(String[] args) {new LombokDemo(1, "Java");// 使用静态工厂方法LombokDemo.of(2, "Java");// 无参构造new LombokDemo();// 包含所有参数new LombokDemo(1, "Java", 2);}}⑧ Builder 使用@Builderpublic class BuilderExample {private String name;private int age;@Singularprivate Set occupations;public static void main(String[] args) {BuilderExample test = BuilderExample.builder().age(11).name("Java").build();}}


    特别声明:本站内容均来自网友提供或互联网,仅供参考,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。