我正在设计一组Document
在对象中保存对象的通用类Folder
:
// 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>
,但就像几位海报指出的那样,我最好返回 a List
,例如:
public List<DocType> findDocuments(...);
(该方法对我的问题并不重要,并且我的实际 API 返回一个Iterator
,所以我只是使用想到的第一件事来简化问题。)