这些是我的课程定义:
public interface Entity ...
public abstract class EntityBaseClass implements Entity ...
public class ArticleCategory extends EntityBaseClass ...
和
public interface GenericService<T extends Entity>
public interface ArticleCategoryService extends GenericService<ArticleCategory>
public class ArticleCategoryServiceImpl implements ArticleCategoryService
为什么我不能这样做:
GenericService<Entity> x = new ArticleCategoryServiceImpl();
答案 0 :(得分:1)
由于ArticleCategoryServiceImpl
实现ArticleCategoryService
,其扩展GenericService<ArticleCategory>
,与GenericService<Entity>
不同。
您应该查看为多态而实例化的对象,而不是它使用的泛型。
您可以将x声明为GenericService<ArticleCategory>
。这可能会更好,因为ArticleCategory>
可以做Entity
,然后有一些。
答案 1 :(得分:0)
像这样考虑一下,如果你有一个GenericService<Entity>
,那么你会有一个像这样的方法:add(Entity entity)
,你可以传入任何实体,即使是一个不是ArticleCategory
,在ArticleCategoryServiceImpl
实施中处理时导致异常的那些。 (请记住,此实现需要ArticleCategory
作为add
方法的参数)
ArticleCategory
是Entity
,但GenericService<ArticleCategory>
不是GenericService<Entity>