java - 接口(interface),如果不是所有实现都使用所有方法怎么办?

标签 java interface implementation

我对接口(interface)编程还很陌生,我正在努力将其作为开发测试驱动的主要工具。

目前我们有很多管理器类都实现了一个CRUD接口(interface)。然而,有些管理器还没有更新,有些还没有删除,有些可能永远不会这样做。


未实现异常?

可以吗,只是

throw new NotImplementedException()

直到该方法被实现,或者如果它永远不会实现,甚至永远?

(显然有源代码注释告诉程序员“不应使用此方法,例如‘男性’‘女性’等类型永远不会被删除)?


split ?

或者我应该将我的 CRUD 界面拆分为可创建、可读(可搜索)、可更新和可删除?这不会扰乱我的类定义吗?

PersonManager implements Creatable<Person>, Updateable<Person>, Deletable<Person>, Searchable<Person>

拆分和合并?

或者我应该将一些接口(interface)(如所有 4 个接口(interface))组合到 CRUD 中,也许还有一些其他组合,如读取 + 更新?

也许这还会产生一大堆接口(interface),其中必须单击一个大的继承路径才能找出哪个接口(interface)实现了当前情况所需的所有原子接口(interface)(我需要读取和创建,所以哪个只实现了两个?这很快就会变得复杂得多)

最佳答案

IMO,对于中间阶段 - 可以使用 NotImplementedException,直到您完成实现。

但是,作为永久解决方案 - 我认为这是一种不好的做法 [在大多数情况下]。

相反,我会创建一个接口(interface),其中包含所有 实现类共有的行为,并使用子接口(interface)将它们聚集起来以获得更具体的行为。

思路类似于java标准 SortedSet ,它扩展了 Set - 我们不想将 Set 视为 SortedSet 并为这种类型的变量赋予 HashSet 值,而是为此,我们使用子接口(interface) SortedSet

关于java - 接口(interface),如果不是所有实现都使用所有方法怎么办?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10224440/

相关文章:

android - 在 android 的适配器类中实现接口(interface)

php - 除了单例之外,在 PHP 中使用静态方法还有哪些令人信服的理由?

c - 在哪里可以找到最小边界框算法的 c/c++ 实现?

java 。重载方法

java - 使用 "this"意味着 "super"使用字段可以吗

interface - Haxe:如何在接口(interface)中声明 "static"方法?

java - 如何使用枚举避免反射

java - BigDecimal 方法返回模糊结果,为什么会发生这种情况?

java - 如果连接失败如何保持连接并重新连接

c# - .Net 接口(interface)何时被视为等效?