Java 密封 类 和联轴器

Java Sealed Classes and Coupling

在编程的时候,耦合不好的指标有很多。 class 应该尽可能少地了解其他 class。所以它是模块化的,可以很容易地更换。

现在,随着密封 classes 的引入,抽象超 class 知道它的子 classes。据我了解,sub-classes 通常与它们的密封接口位于同一个包(甚至同一个文件)中。所以应该不会出现包间循环依赖的问题。

所以我想我要问的是:密封接口及其子class是否应该被视为一个单元,而不是作为模块化部件相互依存?

子class在包外的示例:

import asdf.Car;
import asdf.Truck;

public sealed interface Service permits Car, Truck {

对于触发快乐的亲密选民:密封接口的实现者不能存在于接口模块之外,所以答案很干脆。根本不基于意见。以下是您可能感兴趣的 Brian Goetz 评论:

虽然我已经得到了答案,所以我真的不在乎是否没有其他人可以回答。祝你有美好的一天!

继承总是类型之间的强耦合;因此大多数时候你应该关注

Favor composition over inheritance

大多数使用继承的情况都可以通过组合和依赖注入来解决。


让 subclass 靠近一个模块内的基础 class 是一种很好的做法,不建议这样做。您不希望不相关的包或模块之间存在强耦合。


我说的都有例外。 F.e 您可能想要创建一个抽象 classes 库,这样您项目中的开发人员就可以在不复制实用程序代码的情况下进行扩展。 F.ex java 个集合和摘要集合 class 个。 .