java - Java 密封类和耦合
问题描述
编程时,有很多指标表明耦合不好。一个类应该尽可能少地了解其他类。所以它是模块化的,可以很容易地更换。
现在,随着密封类的引入,抽象超类知道了它的子类。据我了解,子类通常与其密封接口位于同一个包(甚至同一个文件)中。所以应该不存在包之间循环依赖的问题。
所以我想我要问的是:密封接口及其子类是否应该被视为一个单元,而不是相互依赖的模块化部分?
子类在包外的示例:
import asdf.Car;
import asdf.Truck;
public sealed interface Service permits Car, Truck {
触发快乐的近距离投票者:密封接口的实现者不能存在于接口模块之外,因此答案非常简单。完全不是基于意见的。这是您可能感兴趣的 Brian Goetz 的评论:Sealed classes for classes in different packages
虽然我已经得到了答案,所以我真的不在乎是否没有其他人可以回答。祝你今天过得愉快!
解决方案
继承总是类型之间的强耦合;因此,您通常应该遵循
优先组合而不是继承
大多数使用继承的情况都可以通过组合和依赖注入来解决。
使子类靠近一个模块内的基类是一种很好的做法,不建议这样做。您不希望在不相关的包或模块之间存在强耦合。
我所说的一切都有例外。Fe 您可能希望创建一个抽象类库,而不需要复制实用程序代码。F.ex java 集合和抽象集合类。.
推荐阅读
- logging - 配置 datadog 代理以避免 kube-proxy 日志
- javascript - React 内部的状态管理如何?
- python - 如何使用 python 检测重叠的 SVG 路径?
- java - 获取 java.lang.ClassCastException: [B cannot be cast to org.springframework.messaging.Message 消费批次后异常
- c# - WPF 访问 Mainwindow 类之外的变量
- javascript - 在一个angular8应用中,如何知道整个项目配置了多少条路由?
- android - 按特定属性对 Class 列表进行排序
- node.js - 如何从使用异步函数的方法返回数据?
- php - 使用 PHP 执行 curl 请求
- azure-data-factory - ADF 如果发生什么情况
的 是否太大?