还在写枯燥难维护的POJO吗?洁癖的春天在哪里?请看看龙目岛!在以往的Java项目中,不友好的代码太多了:POJOgetter/setter/toString;异常处理;I/O流关闭操作等。这些样板代码没有技术含量,影响代码。美丽,龙目岛应运而生。首先解释一下:任何技术的出现都是为了解决某一类问题。如果在此基础上构建,还不如回归Java本身。合理使用应该保持公平而不是滥用。Lombok的使用很简单,一起来看看吧:1)引入对应的maven包:
*DESC:测试类*/@SuppressWarnings("unused")publicclassTestClass{publicstaticvoidmain(String[]args){}@Getter(value=AccessLevel.PUBLIC)@Setter(value=AccessLevel.PUBLIC)publicstaticclassPerson{privateStringname;privateintage;privatebooleanfriendly;}publicstaticclassAnimal{privateStringname;privateintage;@Getter@Setterprivatebooleanfunny;}}在结构视图中,可以看到生成了getter/setter等方法:编译后的代码如下:【这也是传统Java编程需要写的样板代码】////Sourcecoderecreatedfroma.classfilebyIntelliJIDEA//(poweredbyFernflowerdecompiler)//packagecom.trace;publicclassTestClass{publicTestClass(){}publicstaticvoidmain(String[]args){}publicstaticclassAnimal{privateStringname;privateintage;privatebooleanfunny;publicAnimal(){}publicbooleanisFunny(){returnthis.funny;}publicvoidsetFunny(booleanfunny){this.funny=funny;}}Personpublic{privateStringname;privateintage;privatebooleanfriendly;publicPerson(){}publicStringgetName(){returnthis.name;}publicintgetAge(){returnthis.age;}publicbooleanisFriendly(){returnthis.friendly;}publicvoidsetName(Stringname){this.name=name;}publicvoidsetAge(intage){this.age=age;}publicvoidsetFriendly(booleanfriendly){this.friendly=friendly;}}}@ToString:作用于类,覆盖默认的toString()方法,可以通过of属性限制某些字段的显示,以及使用exclude属性排除某些字段@EqualsAndHashCode:作用于类,覆盖默认的equals和hashCode@NonNull:主要作用于成员变量和参数,标识符不能为空,否则会抛出空指针异常。@NoArgsConstructor、@RequiredArgsConstructor、@AllArgsConstructor:作用于类生成构造函数。有staticName和access等属性。一旦设置了staticName属性,就会以静态方法的形式生成实例,access属性可以限制访问权限。@NoArgsConstructor:生成无参构造函数;@RequiredArgsConstructor:生成包含final和@NonNull注解的成员变量的构造函数;@AllArgsConstructor:生成一个全参数构造函数。编译结果:publicstaticclassPerson{@NonNullprivateStringname;privateintage;privatebooleanfriendly;publicStringtoString(){return"TestClass.Person(name="+this.getName()+",age="+this.getAge()+")";}@NonNullpublicStringgetName(){returnthis.name;}publicintgetAge(){returnthis.age;}publicbooleanisFriendly(){returnthis.friendly;}publicvoidsetName(@NonNullStringname){if(name==null){thrownewNullPointerException("name");}else{this.name=name;}}publicvoidsetAge(intage){this.age=age;}publicvoidsetFriendly(booleanfriendly){this.friendly=friendly;}privatePerson(){}privatestaticTestClass.Personof(){returnnewTestClass.Person();}@ConstructorProperties({"name"})Person(@NonNullStringname){if(name==null){thrownewNullPointerException("name");}else{this.name=name;}}@ConstructorProperties({"name"“年龄”,“友好”})publicPerson(@NonNullStringname,intage,booleanfriendly){if(name==null){thrownewNullPointerException("name");}else{this.name=name;this.age=age;this.friendly=friendly;}}}@Data:作用于类,是以下注解的集合:@ToString@EqualsAndHashCode@Getter@Setter@RequiredArgsConstructor@Builder:作用于类,将类转化为builder模式@Log:作用于类,为不同的日志实现产品生成日志变量,有不同的注解:其他重要注解:@Cleanup:自动关闭资源,对实现java.io.Closeable接口的对象有效。比如一个典型的IO流对象的编译结果如下:是不是太简洁了?@SneakyThrows:可以捕获并抛出checked异常,上面的main方法可以重写如下:@Synchronized:作用在方法层面,可以代替synchronize关键字或者lock,用处不大。
