【问题标题】:Javadoc: repeated methodsJavadoc:重复方法
【发布时间】: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 的重点....

标签: java interface javadoc


【解决方案1】:

您的继承方案与ArrayList 的继承方案基本相同。它实现了List 并扩展了AbstractList。它从接口和抽象类继承equals(),就像你对commonMethodA 所做的那样。 ArrayList 的javadoc 准确显示了您所抱怨的内容:重复提及equals,因为它是从两个地方继承的。这就是 Javadoc 的工作方式。人们已经习惯了。我觉得不用担心。

【讨论】:

  • 好点!我查看了您链接到的 ArrayList 的 Javadoc 页面。我的看起来更糟:distorted.org/javadoc-library/org/distorted/library/…('getHeight()'、'getWidth()' 和 'getID()' 重复)。你看不到它扩展的类和它实现的接口,因为它们都是包本地的。
  • 啊,我认为您的情况不同,因为您的基类和接口不是公共的,因此没有记录,因此 Javadoc 将文档(两次!)放在派生类中。我不确定解决方案是什么。
猜你喜欢
  • 2011-02-03
  • 2013-04-01
  • 2011-04-06
  • 2014-05-31
  • 2010-09-20
  • 2015-10-09
  • 2011-07-07
  • 2013-09-18
  • 2016-02-20
相关资源
最近更新 更多