val是在lombok 0.10中引入的。
您可以将val用作局部变量声明的类型,而不是实际编写该类型。 执行此操作时,将从初始化程序表达式中推断类型。 局部变量也将成为最终变量。 此功能仅适用于局部变量和foreach循环,不适用于字段。 初始化表达式是必需的。
val实际上是某种“类型”,在lombok包中作为真实类存在。 您必须导入它以使val正常工作(或使用lombok.val作为类型)。 本地变量声明中此类型的存在会触发final关键字的添加以及复制覆盖“假” val类型的初始化表达式的类型。
警告:此功能当前在NetBeans中不起作用。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
|
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()); } } }
|
编译后会生成如下代码。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
|
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()); } } }
|
对于复合类型,将推断出最常见的超类,而不是任何共享接口。 例如,bool ? new HashSet():new ArrayList()是具有复合类型的表达式:结果既是AbstractCollection也是Serializable。 推断的类型将是AbstractCollection,因为它是一个类,而Serializable是接口。
在模棱两可的情况下,例如初始化器表达式为null时,将推断java.lang.Object。
可修改的局部变量,其类型通过分配值来推断。
面向getter和setter的更流畅的API。
Annoying API? Fix it yourself: Add new methods to existing types!
New default field modifiers for the 21st century.
Don’t lose your composition.
Sup dawg, we heard you like annotations, so we put annotations in your annotations so you can annotate while you’re annotating.
Utility, metility, wetility! Utility classes for the masses.
With a little help from my friends… Helper methods for java.
Name… that… field! String constants for your field’s names.
Bob now knows his ancestors: Builders with fields from superclasses, too.
Skip, jump, and forget! Make lombok disregard an existing method or constructor.
Bob, meet Jackson. Lets make sure you become fast friends.
-
1.
一 lombok注解说明
-
1.1.
val
-
1.2.
@NonNull
-
1.3.
@Cleanup
-
1.4.
@Getter/@Setter
-
1.5.
@ToString
-
1.6.
@EqualsAndHashCode
-
1.7.
@XxConstructor
-
1.8.
@Data
-
1.9.
@Value
-
1.10.
@Builder
-
1.10.1.
@Builder.Default
-
1.10.2.
@Singular
-
1.10.3.
With Jackson
-
1.11.
@SneakyThrows
-
1.12.
@Synchronized
-
1.13.
@With
-
1.14.
@Getter(lazy=true)
-
1.15.
@Log
-
1.16.
二 实验特征
-
1.16.0.1.
var
-
1.16.0.2.
@Accessors
-
1.16.0.3.
@ExtensionMethod
-
1.16.0.4.
@FieldDefaults
-
1.16.0.5.
@Delegate
-
1.16.0.6.
onMethod= / onConstructor= / onParam=
-
1.16.0.7.
@UtilityClass
-
1.16.0.8.
@Helper
-
1.16.0.9.
@FieldNameConstants
-
1.16.0.10.
@SuperBuilder
-
1.16.0.11.
@Tolerate
-
1.16.0.12.
@Jacksonized