Java:与多继承、Javadoc和接口作斗争

Java:与多继承、Javadoc和接口作斗争,java,interface,javadoc,multiple-inheritance,Java,Interface,Javadoc,Multiple Inheritance,在我的(OpenGL!)Java程序中,我需要3种类型的对象:纹理、帧缓冲区和屏幕。三者都有一些共同特征(宽度、高度、唯一ID),但在一个基本方面也有所不同: 屏幕仅用于输出(渲染) 帧缓冲区可以读取并设置为输出的表面 只能从中读取纹理(对于挑剔者:我知道可以“渲染到纹理”,但只能先将其附加到FBO,在这种情况下,我的程序将其视为帧缓冲区的实例) P是具有多重继承的C++,我有基类的“表面”,然后有两个派生类的输入表面和“输出表面”,并且纹理类扩展了输入表面、屏幕输出表面和Framebuf

在我的(OpenGL!)Java程序中,我需要3种类型的对象:纹理、帧缓冲区和屏幕。三者都有一些共同特征(宽度、高度、唯一ID),但在一个基本方面也有所不同:

  • 屏幕仅用于输出(渲染)
  • 帧缓冲区可以读取并设置为输出的表面
  • 只能从中读取纹理(对于挑剔者:我知道可以“渲染到纹理”,但只能先将其附加到FBO,在这种情况下,我的程序将其视为帧缓冲区的实例)
<> P是具有多重继承的C++,我有基类的“表面”,然后有两个派生类的输入表面和“输出表面”,并且纹理类扩展了输入表面、屏幕输出表面和Framebuffer两者。 脚踏实地-它的爪哇,所以我想出了以下怪物:

interface InputSurface
  {
  /**
   * Return the width of this Surface.
   */
  int getWidth();
  /**
   * Return the height of this Surface.
   */
  int getHeight();
  /**
   * Take the underlying rectangle of pixels and bind this texture to OpenGL.
   */
  boolean setAsInput();
  }

abstract class Surface
  {
  /**
   * Return the width of this Surface.
   *
   * @return width of the Object, in pixels.
   */
  public int getWidth() {...}
  /**
   * Return the height of this Surface.
   *
   * @return height of the Object, in pixels.
   */
  public int getHeight() {...}
  }

public class Texture extends Surface implements InputSurface
  {
  /**
   * Bind the underlying rectangle of pixels as a OpenGL Texture.
   */
  public boolean setAsInput() {...}
  }

abstract class OutputSurface extends Surface
  {
  abstract void setAsOutput();
  }

public class Screen extends OutputSurface
  {
  setAsOutput() {...}
  }

public class Framebuffer extends OutputSurface implements InputSurface
  {
  setAsInput() {...}
  setAsOutput() {...}
  }
(我需要InputSurface接口,因为以后我需要能够接受帧缓冲区和纹理作为像这样的通用方法的输入

void renderFrom(InputSurface surface)
  {
  (...)
  }
上面的工作,唯一的问题是它在Javadoc生成的文档中引入了混乱。在其纹理和帧缓冲区文档中,Javadoc基本上复制了“getWidth/Height”方法,因为它认为Surface类中有一个方法,InputSurface接口中有另一个方法

以下是它提供的文档:


有什么建议吗?

我已经接受了一种基于Javadoc的黑客攻击:使用一种可以让我标记某些公共类、方法和字段以从它生成的文档中排除的方法。

当您的问题是关于Javadoc时,您应该将您的Javadoc注释添加到代码段中。如果InputSurfa中确实存在getWidth和getHeight方法ce和Surface,javadoc生成它有什么问题?@James:看起来像狗屎:)看看@Leszek,你可以看看这是否就是你所指的to@VGR:InputSurface和Surface是本地包。这就是为什么在Javadoc中看不到它们的原因。我确信重复的方法来自于此,因为当我在InputSurface和Surface中更改这些方法上方的注释时,文档也会相应地更改。