【发布时间】:2017-02-17 11:58:14
【问题描述】:
我遇到以下情况:
interface MyInterface
{
void commonMethodA();
void commonMethodB();
void specificMethod();
}
abstract class Base
{
void commonMethodA() {...}
void commonMethodB() {...}
}
class Derived1 extends Base implements MyInterface
{
void specificMethod() {...}
}
class Derived2 extends Base implements MyInterface
{
void specificMethod() {...}
}
即我有一个接口,其中大部分方法对所有实现者都是通用的。因此,恕我直言,上述架构是有意义的,并且确实有效。
唯一的问题是Javadoc。当它解析 Derived{1,2} 类时,它得出的结论是有两个“commonMethodAs”(和 Bs)——一个在扩展自的类 Base 中,另一个在实现的接口中。
有人有什么建议吗?如何让 Javadoc 意识到只有一个 'commonMethodA' ?
编辑:
忘记加了,还有一个
class Derived3withNoSpecifics extends Base
{
(...)
}
它不应该包含 specificMethod()。因此,遗憾的是,让 Base 实现 MyInterface 不是一种选择......
EDIT2:
另一个建议的解决方案,即将 MyInterface 拆分为 MyInterfaceCommon(据我了解,由 Base 实现)和 MyInterfaceSpecific(由 Derived{1,2} 实现)也不起作用,这是因为另一个尚未提及的约束:) : 在程序的其他地方我需要能够接受 Derived1 和 Derived2 的实例作为方法的参数,我目前使用
void theMethod(MyInterface parameter)
{
(...)
}
这个方法实际上是MyInterface接口存在的全部意义..
生成的 Javadoc 页面如下所示:
http://distorted.org/javadoc-library/org/distorted/library/DistortedTexture.html
注意 'getHeight()' 、 'getWidth()' 和 'getID()' 是重复的。您看不到 DistortedTexture 的派生类及其实现的接口,因为两者都是包本地的。
【问题讨论】:
-
我不明白你为什么不用
abstract class Base implements MyInterface?这更合乎逻辑 -
好点,我已经编辑了问题......
-
@Leszek 如何为
specificMethod提供第二个接口? -
@Marius 是的,当然!
-
等等,将 MyInterface 拆分为 MyInterfaceCommon 和 MyInterfaceSpecific 是行不通的,这是因为在程序的其他地方我需要接受 Derived1 和 Derived2 的参数实例,我目前正在这样做,但指的是它们是“MyInterface”——这实际上是 MyInterface 的重点....