Ответ 1
?
по существу указывает на шаблон. <? extends java.lang.Comparable>
означает "любой тип, который расширяет java.lang.Comparable(или Comparable) может быть использован здесь".
В App Engine, в соответствии с JavaDoc, метод getTypeRank
имеет эту подпись:
public static int getTypeRank(java.lang.Class<? extends java.lang.Comparable> datastoreType)
В сигнатуре метода есть знак вопроса внутри угловых скобок:
<? extends java.lang.Comparable>
Что это значит?
?
по существу указывает на шаблон. <? extends java.lang.Comparable>
означает "любой тип, который расширяет java.lang.Comparable(или Comparable) может быть использован здесь".
Он назвал ограниченный подстановочный знак
<? extends Comparable>
- пример ограниченного шаблона.? обозначает неизвестный тип, так же как и подстановочные знаки, которые мы видели ранее. Однако в этом случае мы знаем, что этот неизвестный тип на самом деле является подтипом Comparable. (Примечание: это может быть Сопоставимый или некоторый подкласс, он не должен буквально распространять Comparable.)
Подробнее вы найдете здесь
Это означает "любой класс, реализующий интерфейс Comparable
. Таким образом, вызов будет выглядеть, например, как getTypeRank(String.class)
.
? относится к любому подклассу java.lang.Comparable. Другими словами, любой класс, расширяющий java.lang.Comparable.