阻止API用户使用某些方法

时间:2012-06-28 15:23:56

标签: java oop exception architecture

您好我正在java中实现给定的设计。基本上我有一个名为base的抽象类,我有许多具体的类,它们扩展Base并从不同的包实现接口。每个具体类都将实现不同的接口。现在,这些接口包含基于事件和非基于事件的方法签名。我的问题是;我只希望在我的具体类中实现非基于事件的方法,但是由于implements关键字java迫使我插入一个自动生成的方法体,它基本上返回null。他们可能会在以后实现这些基于事件的方法,但目前不是。让API用户知道这些方法不包含实现的适当方法是什么。这是我的想法;

  1. 使用已弃用的关键字
  2. 创建一个异常类并将该异常抛出到方法中,让API用户处理它。
  3. 我无法更改现有架构。任何想法真的很感激。谢谢。

5 个答案:

答案 0 :(得分:0)

您可以创建自己的界面,其中列出了您希望组件的用户能够访问的所有方法。使其成为他们使用的唯一界面,并且不会显示其他公共方法。

答案 1 :(得分:0)

选项(2)很好,但是当您关注接口时,您将需要未经检查的异常。并将方法记录为未实现。

弃用意味着历史,即它有效,但不应再使用。由于您明确声明这些方法不起作用,因此标记为已弃用不会阻止使用,也不会指示方法未实现。

答案 2 :(得分:0)

根据Oracle,弃用API的原因包括

  
      
  • 这是不安全的,错误的,或非常低效的
  •   
  • 它将在未来的版本中消失
  •   
  • 它鼓励不良的编码习惯
  •   

这两者都不适合你的情况。

就个人而言,我倾向于抛出标准库已经提供的UnsupportedOperationException以便

  

表示不支持请求的操作。

对我来说,这听起来更像你真正想要的。

答案 3 :(得分:0)

我建议使用一些混合包的设计模式。这将有助于您有效地解决这个问题,并使代码也可以维护。

根据我的知识,您可以在此处使用抽象工厂模式。请参见下图中的设计草图。

enter image description here

子类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)。
但是,我会重新考虑重新审视您的设计,看看是否可以避免这样做 - 也许您需要定义另一个接口,它将保存始终实现的方法,并在另一个接口中扩展它(或提供没有扩展的接口)对于前所未有的方法,你并不总是实现。

相关问题