首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在jdk11中实现java jdk14记录?

如何在jdk11中实现java jdk14记录?
EN

Stack Overflow用户
提问于 2020-04-23 11:24:54
回答 2查看 618关注 0票数 1

我希望避免一些样板代码。我看到jdk14有记录,如下面的示例所示。

https://www.logicbig.com/tutorials/core-java-tutorial/java-14-changes/records.html

如何在jdk11中执行类似于记录的操作?

EN

回答 2

Stack Overflow用户

发布于 2020-04-23 11:37:53

我强烈推荐Project Lombok (这里是https://projectlombok.org/)。从您列出的示例中

代码语言:javascript
复制
 public record Person(String name, String gender, int age) {}

这可以通过Lombok完成,如下所示

代码语言:javascript
复制
import lombox.Data

@Data
public class Person() {
    private String name;
    private String gender;
    private int age;
}

Lombox创建了getter和setter、toStringhashCode和一个默认构造函数,以及一个包含所有orgs的构造函数。

更新:评论中指出记录是不可变的。使用lombok可以通过几种方式轻松实现这一点。选项1:

代码语言:javascript
复制
import lombox.Data

@Data
public class Person() {
    private final String name;
    private final String gender;
    private final int age;
}

这将再次添加所需的-args构造函数。由于相对明显的原因,@Data不会为final字段创建setter。

选项2更明确一点:

代码语言:javascript
复制
import lombok.*;

@RequiredArgsConstructor
@EqualsAndHashCode
@Getter
public class Person() {
    private String name;
    private String gender;
    private int age;
}
票数 2
EN

Stack Overflow用户

发布于 2020-04-23 11:29:05

您可以使用代码生成。它不像Java 14那样简洁,但总比没有强。AutoValue是相当神奇的。

代码语言:javascript
复制
import com.google.auto.value.AutoValue;

@AutoValue
abstract class Animal {
  static Animal create(String name, int numberOfLegs) {
    return new AutoValue_Animal(name, numberOfLegs);
  }

  abstract String name();
  abstract int numberOfLegs();
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61378827

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档