有什么方法可以将Records与继承一起使用?

时间:2020-08-26 21:11:00

标签: java record

我有很多使用Lombok的Cannot drop asymmetric key 'key_clr_http_request' because there is a login mapped to it. 类,我想迁移所有这些类以使用Java 14中可用的新Record功能。

我知道还早一点,但这是我正在做的实验性测试。

这里的主要问题涉及继承。我有一个B类,它扩展了A类。是否可以通过继承使用Records?

2 个答案:

答案 0 :(得分:2)

是否可以使用带有继承的记录?

记录已扩展java.lang.Record。由于Java不允许多重继承,因此记录无法扩展任何其他类。

例如,考虑以下记录Point

public record Point(double x, double y) {}

您可以使用以下命令进行编译:

javac --enable-preview -source 14 Point.java

借助javap,您可以了解有关为Point生成的代码的详细信息:

javap -p Point

输出将是:

Compiled from "Point.java"
public final class Point extends java.lang.Record {
  private final double x;
  private final double y;
  public Point(double, double);
  public java.lang.String toString();
  public final int hashCode();
  public final boolean equals(java.lang.Object);
  public double x();
  public double y();
}

答案 1 :(得分:1)

JEP说明:

记录限制


记录不能扩展任何其他类,并且不能声明除与状态描述组件相对应的私有final字段以外的实例字段。声明的任何其他字段都必须是静态的。这些限制确保了状态描述独自定义了表示形式。

但是,它们可以实现接口并定义实例方法,因此您可以多态使用它们。此外,由于它们将继承默认方法,因此它们确实支持有限形式的继承。

这时,Java语言规范未指定记录构造及其语义。

相关问题