2017-02-17 2 views
0

В моей (OpenGL!) Java-программе мне нужны 3 типа объектов: текстуры, фреймбуферы, экраны. Все три имеют некоторые общие характеристики (ширина, высота, уникальный идентификатор), но также различны в 1 фундаментальным образом:Java: борьба с множественным наследованием, Javadoc и интерфейсы

  • Экраны только для вывода (визуализации)
  • фреймбуферов можно читать и установить в качестве поверхностей для вывода
  • Текстуры можно читать только (для nitpickers: я знаю, что можно «визуализировать текстуру», но только сначала привязывая его к FBO, и в этом случае моя программа рассматривает его как экземпляр Framebuffer)

Был ли он C++ с его множественным наследованием, у меня была бы база класс «Поверхность», затем два производных класса «InputSurface» и «OutputSurface», и класс Texture расширяет InputSurface, Screen OutputSurface и Framebuffer.

вниз к наземен его Java, поэтому я придумал следующее уродство:

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 производства. В своей текстуре и Framebuffer документы Javadoc по существу дублирует «GetWidth/Height» metods, потому что он думает, что есть один я n Класс поверхности и другой в интерфейсе InputSurface.

Вот документация он приходит с:

http://distorted.org/javadoc-library/org/distorted/library/DistortedTexture.html

Любые советы?

+0

Когда ваш вопрос о javadoc, вы должны добавить свои комментарии javadoc к фрагменту. –

+0

Если верно, что в InputSurface и Surface есть методы getWidth и getHeight, что не так, если javadoc генерирует его? –

+0

@ Джеймс: это похоже на дерьмо :) Взгляните на http://distorted.org/javadoc-library/org/distorted/library/DistortedTexture.html – Leszek

ответ

0

Я поселился в хаке на основе Javadoc: используйте custom Doclet, который позволяет мне отмечать определенные общедоступные классы, методы и поля, которые должны быть исключены из документации, которую он производит.

Смежные вопросы