2015-06-17 140 views
1
public interface ISomething 
    /** 
    * This method does something! 
    */ 
    public void something(); 
} 

public abstract class AbstractSomething implements ISomething 
{ 
    /** 
    * See {@link #doSomething()} 
    */ 
    public final void something() 
    { 
     doSomething(); 
     // Do something else... 
     ... 
    } 

    protected abstract void doSomething(); 
} 

public class ConcreteSomething extends AbstractSomething 
{ 

    /** 
    * Concrete implementation of doSomething(). It does... something! 
    */ 
    @Override 
    protected void doSomething() 
    { 
     // Actually do something... 
     ... 
    } 
} 

所以我有一個類層次結構,看起來像這樣。這個想法是使用public final()方法,然後抽象doSomething()模式,以便擴展類有義務調用super()方法。 Andrzej answer's以抽象方法寫javadoc的正確方法是什麼

然後,我最終會有幾個擴展AbstractSomething的實現。這段代碼的客戶端將會實例化這些實現並使用ISomething方法。

事情是這樣的:

public class Main 
{ 
    public static void main(String[] args) 
    { 
     ConcreteSomething concrete = new ConcreteSomething(); 
     concrete.something(); 
    } 
} 

所以現在的問題是,採用這種設計成語是那裏寫的層次結構良好的javadoc以正確的方式?

正確的意思是: 當客戶端調用concrete.something()時,我希望他們看到ConcreteSomething#something()javadoc。由於該方法是最終的,但是,我不能簡單地覆蓋它並編寫具體的javadoc。 另外,我的客戶不會看到doSomething()方法,因爲它受到保護,所以我不能將具體的javadoc放在那裏。

因此,換句話說,我可能需要對面{} @InheritDoc :)

任何建議嗎?

回答

0

該問題類似於接口的文檔。客戶端將使用抽象,並將主要看到抽象的通用文檔。在你的情況下,你可以做的最好的事情是將文檔添加到每個具體類的構造函數中。至少通過這種方式,客戶將看到實施細節,如果需要,您可以包含相關的@link@see

相關問題