val

作者: eagle_king | 来源:发表于2019-01-13 15:08 被阅读0次

val

终于!无麻烦的 final local variables。
val 在 lombok 0.10 引进。

Overview

您可以使用val作为本地变量声明的类型,而不是实际写入类型。执行此操作时,将从初始化表达式推断出类型。本地变量也将成为final变量。此功能仅适用于局部变量和foreach循环,而不适用于字段。初始化表达式是必需的。

val 实际上是一种“类型”,并且作为lombok包中的真实类存在。您必须导入它才能使 val 工作(或用lombok.val作类型)。在本地变量声明中存在这种类型会触发添加final关键字以及复制覆盖 'fake' val 类型的初始化表达式的类型。

警告:此功能目前在NetBeans中不起作用。

With Lombok

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());
    }
  }
}

Vanilla Java

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());
    }
  }
}

Supported configuration keys:

lombok.val.flagUsage = [warning | error] (default: not set)
如果配置, Lombok 会将任何 val 用法标记为警告或错误。

Small print

对于复合类型,推断出最常见的超类,而不是任何共享接口。例如,bool ? new HashSet() : new ArrayList()是一个带有复合类型的表达式:结果既是AbstractCollection,也是Serializable。推断的类型将是AbstractCollection,因为它是一个类,而是Serializable一个接口。

在不明确的情况下,例如当初始化表达式是null,推断出java.lang.Object

相关文章

网友评论

      本文标题:val

      本文链接:https://www.haomeiwen.com/subject/obtldqtx.html