我設計了一套持有Folder
對象中Document
對象泛型類:泛型類方法返回了自己的類型作爲模板參數
// Folder, which holds zero or more documents
public interface Folder<DocType extends Document>
{
// Locate matching documents within the folder
public ArrayList<DocType> findDocuments(...);
...
}
// Document, contained within a folder
public interface Document
{
// Retrieve the parent folder
public Folder getFolder(); // Not correct
...
}
這些類,然後擴展到實際執行的文件夾和文件類型。問題在於Document.getFolder()
方法需要返回類型爲Folder<DocType>
的對象,其中DocType
是Document
的實際實現類型。這意味着該方法需要知道它自己的具體類類型是什麼。
所以我的問題是,如果Document
類中聲明,而不是像這樣:
// Document, contained within a Folder
public interface Document<DocType extends Document>
{
// Retrieve the parent folder
public Folder<DocType> getFolder();
...
}
或者是有一個更簡單的方法來做到這一點?上面的代碼需要具體的實現看起來像這樣:
public class MyFolder
implements Folder<MyDocument>
{ ... }
public class MyDocument
implements Document<MyDocument>
{ ... }
這是Document<MyDocument>
部分似乎有點怪我。真的有必要嗎?
(道歉,如果這是一個重複。我找不到我的檔案尋找確切的答案)
附錄
上面的原代碼使用ArrayList<DocType>
,但像一些海報已經指出的那樣,我會是最好返回List
,如:
public List<DocType> findDocuments(...);
(該方法對我的問題並不重要,我的實際API返回Iterator
,所以我只是想出了第一件事來簡化問題。)
注意:如果可能,請使用接口(List)而不是實現類型(ArrayList)作爲返回值。 – Puce
有時候泛型可能有點痛苦。但在這種情況下,我不確定我想要使用它們。任何你爲什麼不高興,如果有文件夾只是返回一個文件清單,並把它留在那? – ianpojman
「文件夾」可以只包含一種「文檔」嗎? (這是你目前的通用接口建議。) – Jeffrey