我遇到以下情况:
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派生自的类及其实现的接口,因为它们都是包本地的。
答案 0 :(得分:1)
您的继承方案与ArrayList的方案基本相同。它实现List
并扩展AbstractList
。它从接口和抽象类继承equals()
,就像使用commonMethodA
一样。 ArrayList的javadoc准确显示了你抱怨的内容:重复提及equals
,因为它是从两个地方继承的。这就是Javadoc的工作方式。人们已经习惯了。我认为没有必要担心。