您好我正在java中实现给定的设计。基本上我有一个名为base的抽象类,我有许多具体的类,它们扩展Base并从不同的包实现接口。每个具体类都将实现不同的接口。现在,这些接口包含基于事件和非基于事件的方法签名。我的问题是;我只希望在我的具体类中实现非基于事件的方法,但是由于implements关键字java迫使我插入一个自动生成的方法体,它基本上返回null。他们可能会在以后实现这些基于事件的方法,但目前不是。让API用户知道这些方法不包含实现的适当方法是什么。这是我的想法;
我无法更改现有架构。任何想法真的很感激。谢谢。
答案 0 :(得分:0)
您可以创建自己的界面,其中列出了您希望组件的用户能够访问的所有方法。使其成为他们使用的唯一界面,并且不会显示其他公共方法。
答案 1 :(得分:0)
选项(2)很好,但是当您关注接口时,您将需要未经检查的异常。并将方法记录为未实现。
弃用意味着历史,即它有效,但不应再使用。由于您明确声明这些方法不起作用,因此标记为已弃用不会阻止使用,也不会指示方法未实现。
答案 2 :(得分:0)
根据Oracle,弃用API的原因包括
- 这是不安全的,错误的,或非常低效的
- 它将在未来的版本中消失
- 它鼓励不良的编码习惯
这两者都不适合你的情况。
就个人而言,我倾向于抛出标准库已经提供的UnsupportedOperationException以便
表示不支持请求的操作。
对我来说,这听起来更像你真正想要的。
答案 3 :(得分:0)
我建议使用一些混合包的设计模式。这将有助于您有效地解决这个问题,并使代码也可以维护。
根据我的知识,您可以在此处使用抽象工厂模式。请参见下图中的设计草图。
子类1和子类2中的Method1和method2是应该公开的,而子类1和子类2中的method3和method4是我们不想公开的。
创建一个Genericsubclass接口,并根据子类中方法的性质在此接口中创建一些方法。例如:我在这个接口中创建了一个名为nonEventbasedmethod1
的方法创建与每个子类对应的工厂,每个工厂将实现GenericSubclass接口。然后在subclass1Factory中实现nonEventbasedmethod1方法就像
nonEventbasedmethod1(){
subclass1.method1();
}
在subclass2Factory中实现nonEventbasedmethod1方法会有点像
nonEventbasedmethod1(){
subclass2.method3();
}
然后创建一个SubclassAbstract Factory,它将返回一个子类工厂,然后不必担心返回了哪个工厂(在返回相应的工厂之前已经在SubclassAbstractFactory中做出了决定)只需从GenericSubclass接口调用所需的方法,将调用子类1或子类2中的一个方法下面。
希望这有帮助。
答案 4 :(得分:0)
如果您明确抛出“NotSupported”或“NotImplemented”异常的异常 - 请考虑NotImplementedException的异常(在org.apache.commons)。
但是,我会重新考虑重新审视您的设计,看看是否可以避免这样做 - 也许您需要定义另一个接口,它将保存始终实现的方法,并在另一个接口中扩展它(或提供没有扩展的接口)对于前所未有的方法,你并不总是实现。