【发布时间】:2021-03-20 20:00:35
【问题描述】:
我正在试用 java 14 的新记录功能,目前处于预览阶段。
我知道在 Java 中,每个文件必须有一个公共类,但是新的记录语法非常好和短,拥有一堆文件,每个文件都有一行代码似乎很浪费。
我特别想尝试像这样对简单的 AST 进行建模,并且我认为将所有内容放在一个文件中确实可以提高可读性和理解力。
package com.company;
public interface Expression {
}
public record IntExp(int value) implements Expression {
}
public record AddExp(Expression left, Expression right) implements Expression {
}
public record SubtractExp(Expression left, Expression right) implements Expression {
}
// Etc..
但不幸的是,这不会编译。
所以我的问题是:
有什么办法可以绕过这个限制,或者有什么办法可以将这样的代码全部保存在一个地方吗?
【问题讨论】:
-
“将这样的代码保存在一个地方” ...这就是包的用途。
-
"我认为将所有内容放在一个文件中确实可以提高可读性和理解力" FWIW,我不知道。任何设计良好的接口的关键在于它的潜在实现是无限的。仅仅因为您在一个文件中有 3 个实现并不意味着我可以忽略可能存在其他实现的事实。另外,我假设您的接口和实现实际上至少有一个带有实现的方法,所以只有 4 行定义的情况是相当人为的。
-
@Michael 你应该阅读sealed types
-
@Michael 对不起,我不是故意嘲笑你的。这句话:“任何设计良好的接口的关键在于它的潜在实现是无限的”让我觉得,也许,你没有读过密封类型。我的观点是密封类型似乎是 OP 所要求的
-
@fps 是的,密封类型似乎是我正在寻找的!事实上,我基本上是在尝试从函数式语言中重新创建 sum 类型。如果你把它放在答案中,我会接受它。
标签: java java-14 java-record