在祖国65岁生日之际,道一声生日快乐,也祝大家国庆节happy。当大家选择和拥塞的公路较劲的时候,我选择了宅在家里用自己微薄的文字为Java中一个很方便的工具Lombok平反。
忘记了什么时候看到Lombok这个东西,开始对它的感觉是读起来很霸气,有没有哈哈。
渐渐的发现,这个东西还真是TMD方便啊,可以在Java世界里面一直默默无闻不知道是什么原因。今天就给大家分享一下Lombok,让大家感受一下这厮到底有多方便,到底能让你的代码多精简。
先上一个叫做val 的东东, 我们定义一个常量是不是都会这样写:
import java.util.ArrayList; import java.util.HashMap; import java.util.Map; public class ValExample { public String example() { final ArrayList<String> example = new ArrayList<String>(); example.add("Hello, World!"); final String foo = example.get(0); return foo.toLowerCase(); } public void example2() { final HashMap<Integer, String> map = new HashMap<Integer, String>(); map.put(0, "zero"); map.put(5, "five"); for (final Map.Entry<Integer, String> entry : map.entrySet()) { System.out.printf("%d: %s\n", entry.getKey(), entry.getValue()); } } }
但是, 自从有了Lombok, final + 类型 这种复杂的定义方式不再需要了。
import java.util.ArrayList; import java.util.HashMap; import lombok.val; public class ValExample { public String example() { val example = new ArrayList<String>(); example.add("Hello, World!"); val foo = example.get(0); return foo.toLowerCase(); } public void example2() { val map = new HashMap<Integer, String>(); map.put(0, "zero"); map.put(5, "five"); for (val entry : map.entrySet()) { System.out.printf("%d: %s\n", entry.getKey(), entry.getValue()); } } }
再来一个annotation 让大家尝尝鲜,来个@NotNull,看到他的介绍果然惊艳,叫“爱上NPE”,让我们一起见证一下如何爱上NPE:
对比下面两端代码,你就会很明显的感觉到它的益处:
import lombok.NonNull; public class NonNullExample extends Something { private String name; public NonNullExample(@NonNull Person person) { super("Hello"); this.name = person.getName(); } }
import lombok.NonNull; public class NonNullExample extends Something { private String name; public NonNullExample(Person person) { super("Hello"); if (person == null) { throw new NullPointerException("person"); } this.name = person.getName(); } }
估计看过guava代码的亲们应该都看到过这种annotation的。其实NotNull包括了两种Exception,有一个可选的annotation参数,通过exceptionType,可以决定当前位置是用IllegalArgumentException还是NPE,当然默认值就是NPE了。在Lombok中有一个好处就是如果使用了如@Data这样的Lombok annotation,也会默认出发@NotNull 的, 同时如果把@NotNull加到了原始类型上,你将收获一个warning。
只有处理NPE的怎么够,接下来我们陆续学习更多的Lombok的好东西:
如果想关注Lombok 更多内容可以去官方网页细细品味:http://www.projectlombok.org/