为什么 Java 条记录不支持继承?

Why Java records do not support inheritance?

今天,当我要向应用程序添加新功能时,我碰壁了。我有一个数据记录,但我需要一些额外的值。将它添加到记录中是没有意义的,因为在大多数情况下它们不会被使用并且会为空,所以我想到了继承,这在这种情况下非常有意义。但是有一个问题,因为 Java 记录不支持继承,所以我最终将记录重写为带有最终值和吸气剂的丑陋的 POJO class。

所以我的问题基本上是——为什么没有继承。我明白没有多重继承是因为它在某些点上很乱而且很难控制,但我们也有最终的classes不能被继承,为什么我们不能有记录和最终记录?

见对应JEP:

Records are implicitly final, and cannot be abstract. These restrictions emphasize that the API of a record is defined solely by its state description, and cannot be enhanced later by another class or record.

The components of a record are implicitly final. This restriction embodies an immutable by default policy that is widely applicable for data aggregates.

重点是减少使用模式的范围,compiler/JVM可以进行记录概念所涉及的那种优化。

意思是:如果允许子类化,运行时将不得不处理多态性。这不是记录背后的意图。