使用泛型的层次结构在Java中进行转换

时间:2014-04-24 18:46:09

标签: java generics inheritance nested-generics

这些是我的课程定义:

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(); 

2 个答案:

答案 0 :(得分:1)

由于ArticleCategoryServiceImpl实现ArticleCategoryService,其扩展GenericService<ArticleCategory>,与GenericService<Entity>不同。

您应该查看为多态而实例化的对象,而不是它使用的泛型。

您可以将x声明为GenericService<ArticleCategory>。这可能会更好,因为ArticleCategory>可以做Entity,然后有一些。

答案 1 :(得分:0)

像这样考虑一下,如果你有一个GenericService<Entity>,那么你会有一个像这样的方法:add(Entity entity),你可以传入任何实体,即使是一个不是ArticleCategory,在ArticleCategoryServiceImpl实施中处理时导致异常的那些。 (请记住,此实现需要ArticleCategory作为add方法的参数)

ArticleCategoryEntity,但GenericService<ArticleCategory>不是GenericService<Entity>