-
Notifications
You must be signed in to change notification settings - Fork 1
val
val
是在lombok 0.10中引入的。
你可以使用 val
作为局部变量声明的类型,而不是写实际的类型。 执行此操作时,将从初始化表达式推断出类型。 局部变量也将成为 final
。 此功能仅适用于局部变量和foreach循环,而不适用于字段。 初始化表达式是必需的。
val
实际上是一种“类型”,在lombok
包中作为一个真正的类存在。 你必须导入它才能使val工作(或使用lombok.val作为类型)。 在本地变量声明中存在这种类型 (val) 会触发添加final
关键字以及复制初始化表达式的类型(该类型会覆盖'伪'val类型)。
警告:此功能目前在NetBeans中不起作用。
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());
}
}
}
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.val.flagUsage
= [warning
| error
] ( (default: not set)
如果已配置,Lombok会将val
的任何用法标记为警告或错误。
对于复合类型,推断出最常见的超类,而不是任何共享接口。 例如,bool ? new HashSet() : new ArrayList()
是一个带有复合类型的表达式:结果既是AbstractCollection
又是Serializable
。 推断的类型将是AbstractCollection,因为它是一个类,而Serializable是一个接口。
在模糊的情况下,例如当初始化表达式为null
时,推断出java.lang.Object
。
在package下建立lombok.config文件,比如val package。
此时配置值为 lombok.val.flagUsage = warning
,
在编译时看到下图的警告
。
此时假如我们把值改为 lombok.val.flagUsage = error
, (注意用IDEA等工具时,要删除target下面编译好的类,此配置才生效),
在编译时会报下图中的错误