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

Has*_*san 2 java generics

我对java中的泛型很陌生.我有一个名为的接口RIEngine.

我正在尝试以下示例:

private <T> boolean allExist(List<T extends RIEngine> resultedList, 
                             String... columnName)
{ ... }
Run Code Online (Sandbox Code Playgroud)

不编译.

private <T> boolean allExist(List<? extends RIEngine> resultedList, 
                            String... columnName)
{ ... }
Run Code Online (Sandbox Code Playgroud)

编译.

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

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

请帮我理解.

Boh*_*ian 9

试试这个:

private <T extends RIEngine> boolean allExist(List<T> resultedList, String... columnName){...
Run Code Online (Sandbox Code Playgroud)

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

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