今天下午看到一篇关于JDK1.8排序的文章 采用lambda表达式通过一系列1.8提供的链式调用来进行 作者在提供测试用例的实体类的时候用到了一种叫做lombok的注解形式 既视感是这样的
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User{
private String name;
private Integer age;
private Integer credits;
}
去查了相关的资料 @Data提供所有属性的getter和setter方法 此外还提供equals、hashcode、toString等方法,@AllArgsConstructor @NoArgsConstructor分别提供全参的构造方法和无参的构造方法,原理是编译器修改抽象语法树(AST)后生成字节码。哇,发现是多么好的工具啊,能把代码简化这么多 这样的神器为什么之前不知道呢,这让我不禁产生怀疑 这其中肯定是有什么弊端 我们都知道现在成熟的IDE都提供自动生成这些方法的功能,虽然用了lombok可以让我们的代码看上去简洁 但是也让我们的代码变得难以维护。但是我还是去尝试得去用了,不仅要导入架包还需要为IDE装插件 为项目手动开启Annotation Processing 繁琐。更大的弊端是代码对我们是不可见的。为IDE装一堆插件也容易导致崩溃。 论坛有因为用了lombok的原因 而导致需要花费数小时重新编译全部文件的例子。能够简单的操作 绝对不要复杂。
还接触到了Guava工具类 包含了若干被Google的java项目广泛依赖的核心库 例如:集合[Collections]、缓存[caching]、原生类型支持[primitives support]、并发库[concurrency libraries]、通用注解[common annotations]、字符串处理[string processing]、I/O等等 所有的工具每天都在被Google的工程师应用在产品服务中。
与goodle guava的类似的工具类还有Apache commons 。其中的源码是很好的学习工具。