【发布时间】:2020-09-30 10:03:00
【问题描述】:
我是 java 继承的新手,很难理解这个概念的细节。在我的 Springboot 项目中,我最初有 2 个域类:
public class Excerpt {
private int excerptID;
private String author;
private String title;
private String text;
private String comments;
}
public class Tag {
private int excerptID;
private String description;
}
DAO 包由通用 DAO 接口组成
public interface DAO<T> {
public void save(int id, String... params);
public List<T> getAll();
public List<T> getByTitle(String... params);
public List<T> getByTag(String... params);
public List<T> getByID(int excerptID);
public int countAll();
public void delete(int id);
}
和 2 个类实现
public class ExcerptDAO implements DAO<Excerpt> { ... }
public class TagDAO implements DAO<Tag> { ... }
到目前为止一切顺利。但后来我决定添加另一个域类Outline,它将与Excerpt共享Tag数据库表
public class Outline {
private int outlineID;
private String title;
private String plot;
private String comments;
private String genre;
private String resources;
}
DAO 方法也会部分重叠,所以我添加了另一个级别的接口。伞形 DAO 接口:
public interface DAO<T> {
public void save(int id, String... params);
public List<T> getAll();
public List<T> getByTitle(String... params);
public List<T> getByTag(String... params);
public List<T> getByID(int id);
public int countAll();
public void delete(int id);
}
ExcertpsDAO 和 OutlinesDAO 扩展接口
public interface ExcerptsDAO extends DAO<Excerpt>{
public List<Excerpt> getByAuthor(String... params);
}
public interface OutlinesDAO extends DAO<Outline> {
public List<Outline> getByGenre(String... params);
public List<Outline> getByResource(String... params);
}
我即将将它们实现到类中,但不明白我遇到的错误:
public class ExcerptDAO implements ExcerptsDAO<Excerpt> { ... }
The type ExcerptsDAO is not generic; it cannot be parameterized with arguments <Excerpt>
显然这是正确的
public class ExcerptDAO implements ExcerptsDAO { ... }
但是我不明白为什么参数与ExcerptsDAO界面中的参数相同时不接受。如果参数相同,为什么接口不是通用的很重要?
【问题讨论】:
-
旁注:您应该为实现和接口考虑更好的名称或不同的命名方案。 IMO
ExcerptDAO和ExcerptsDAO太相似了,可能会引起混淆。 -
@Thomas,是的,我知道......一旦我解决了实际问题,我就想这样做
标签: java spring-boot parameters hierarchy