前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >lombok的val

lombok的val

作者头像
阿超
发布2023-02-22 14:01:33
9180
发布2023-02-22 14:01:33
举报
文章被收录于专栏:快乐阿超

满足是发明创造的窒息物——佚名

kt中的val让我用的爱不释手,不用重复定义一个又一个类型,编译器会自动推导

今天遇到一个情况,我们知道把java代码粘贴到kt文件里,idea会自动转换javakt

但反过来将kt代码粘贴到java文件里则不会,原来的val,现在还是val

这时候可以使用lombokvalhttps://projectlombok.org/features/val

image-20230221223643728
image-20230221223643728

例如下面的代码会被编译为合适的类型:

代码语言:javascript
复制

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

会被编译成

代码语言:javascript
复制

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-02-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档