为什么这种泛型返回类型的方法无效

时间:2012-01-08 16:03:05

标签: java generics interface return-value

我不明白。在java中,我允许将接口声明为方法的返回类型,如:

public List<String> get(){
    return new ArrayList<String>();
}

如果我现在有一个接口可以说I和一个类C来实现它,为什么我不允许这样定义:

public List<I> get(){
    return new ArrayList<C>();
}

我知道创建ArrayList<I>并添加C的解决方案,但我想知道为什么我不允许像上面那样声明它。我认为每个C也是I虽然它应该没问题。

2 个答案:

答案 0 :(得分:10)

您无法执行此操作,因为List<I>List<C>是不兼容的类型。

你可以这样做,但是

public List<? extends I> get(){
    return new ArrayList<C>();
}

答案 1 :(得分:5)

你遇到了共同和逆转的问题。简而言之:您的List<I>界面还有一个方法Add,它需要一个I的实例,但不是每个I实际上都会由{{1}实现任何其他类也可以实现C。因此,您最终会遇到类型转换问题。