0

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

  1. 使用不推荐使用的关键字
  2. 创建一个异常类并在方法内抛出该异常并让 API 用户处理它。

我没有对现有架构进行更改的选项。任何想法都非常感谢。谢谢你。

4

5 回答 5

0

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

于 2012-06-28T15:31:25.030 回答
0

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

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

于 2012-06-28T15:32:15.623 回答
0

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

  • 它不安全、有缺陷或效率极低
  • 它会在未来的版本中消失
  • 它鼓励不良的编码实践

两者都不适合您的情况。

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

表示不支持请求的操作。

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

于 2012-06-28T15:38:17.257 回答
0

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

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

在此处输入图像描述

subclass1 和 subclass2 中的 method1 和 method2 是应该公开的,而 subclass1 和 subclass2 中的 method3 和 method4 是我们不想公开的。

创建一个 Genericsubclass 接口,并根据子类中方法的性质在该接口中创建一些方法。例如:我在这个接口中创建了一个名为 nonEventbasedmethod1 的方法

为每个子类创建一个工厂,每个工厂都会实现 GenericSubclass 接口。然后在 subclass1Factory 中实现 nonEventbasedmethod1 方法就像

nonEventbasedmethod1(){
    subclass1.method1();
}

并且在 subclass2Factory 中实现 nonEventbasedmethod1 方法类似于

nonEventbasedmethod1(){
    subclass2.method3();
}

然后创建一个 SubclassAbstract Factory,它将返回其中一个子类工厂,然后不用担心返回了哪个工厂(在返回适当的工厂之前已经在 SubclassAbstractFactory 中做出了该决定)只需从 GenericSubclass 接口和以下之一调用所需的方法将调用来自 subclass1 或 subclass2 的方法。

希望这可以帮助。

于 2012-06-28T16:41:52.693 回答
0

如果您简单地为“NotSupported”或“NotImplemented”异常抛出异常 - 考虑NotImplementedException 异常(在 org.apache.commons)。
但是,我会重新考虑重新审视您的设计,看看您是否可以避免这种情况 - 也许您需要定义另一个接口,该接口将保存始终实现的方法,并将其扩展为另一个接口(或提供一个没有扩展的接口到上一个)对于您并不总是实施的方法。

于 2012-06-30T17:30:50.013 回答