通配符(?)工作,而类型“T”不在泛型 - 为什么?

时间:2012-05-23 14:05:31

标签: java generics

我对java中的泛型很安静。我有一个名为RIEngine的接口。

我正在尝试以下示例:

private <T> boolean allExist(List<T extends RIEngine> resultedList, 
                             String... columnName)
{ ... }

无法编译。

但是

private <T> boolean allExist(List<? extends RIEngine> resultedList, 
                            String... columnName)
{ ... }

编译。

我的问题是:为什么会如此。

为什么我不能使用type =“T”而不是外卡?

请帮助我理解。

1 个答案:

答案 0 :(得分:9)

试试这个:

private <T extends RIEngine> boolean allExist(List<T> resultedList, String... columnName){...

您需要将类型边界放在声明类型中,而不是在使用它的位置。

第二个编译的原因是因为它是一个通配符(您可以使用它而不事先声明为该方法的类型)