use*_*547 4 java java-14 java-record
给定一个带有 final 字段的简单类,例如 a String(参见下面的示例)或 Spring 依赖项,使用 Java 14 记录使其更简洁并可能删除 Lombok 等注释处理器是个好主意吗?
根据JEP描述记录,“记录使语义声明成为其数据的简单、透明的持有者”。
显然,只有 final 字段的泛型类并不是其数据的透明持有者,并且在使用记录时,其final变量是公开的,这可能是不可取的。但是,在许多情况下,这可能不是主要问题。
因此,这是否“足以”将其视为对该语言功能的“滥用”?或者还有其他不那么明显的缺点吗?
@RequiredArgsConstructor // or an explicit constructor when not using lombok
class AudienceValidator implements OAuth2TokenValidator<Jwt> {
private final String audience;
public OAuth2TokenValidatorResult validate(Jwt jwt) {
// validate
}
}
record AudienceValidator(String audience) implements OAuth2TokenValidator<Jwt> {
public OAuth2TokenValidatorResult validate(Jwt jwt) {
// validate
}
}
Run Code Online (Sandbox Code Playgroud)
这取决于这里的预期语义,但根据我在这里看到的,这可能是一种滥用。是AudienceValidator它的状态还是它的状态?它的所有行为是否都源自其状态(norm()方法从 a 的实部和虚部导出的方式Complex)?
考虑记录的最佳方式是它们是名义元组,可以通过行为来增强。(一个有用的类比:Java 枚举对于 C 枚举,就像记录对于结构元组一样。)这似乎不是您在这里所做的,因此客户端在 API 中看到此类作为记录公开时,理所当然地感到困惑,但行为不同。
您可能会问“但是,为什么我不利用这个语言功能来简化编写这个类的工作呢?” 你当然可以随心所欲,但读代码比写代码更重要。故意使用错误的功能,因为它更容易将作者的便利置于读者的便利之上。
| 归档时间: |
|
| 查看次数: |
585 次 |
| 最近记录: |