В синтаксисе Java, класс<? Что-то расширяет>
Class<? extends Something>
Вот моя интерпретация, это шаблон класса, но класс? означает, что имя класса не определено и расширяет класс Something.
если что-то не так с моей интерпретацией, дайте мне знать.
5 ответов
Вы почти правы. По сути, в Java нет концепции шаблонов (в C++ есть). Это называется дженерики. И это определяет общий класс Class<>
с атрибутом generics, являющимся любым подклассом Something
,
Я предлагаю прочитать " Каковы различия между" универсальными "типами в C++ и Java?", Если вы хотите получить разницу между шаблонами и шаблонами.
Здесь есть несколько запутанных ответов, поэтому я постараюсь прояснить это. Вы определяете универсальный как таковой:
public class Foo<T> {
private T t;
public void setValue(T t) {
this.t = t;
}
public T getValue() {
return t;
}
}
Если вы хотите, чтобы шаблон Foo всегда расширял класс Bar, вы должны объявить его так:
public class Foo<T extends Bar> {
private T t;
public void setValue(T t) {
this.t = t;
}
public T getValue() {
return t;
}
}
?
используется, когда вы объявляете переменную.
Foo<? extends Bar>foo = getFoo();
ИЛИ ЖЕ
DoSomething(List<? extends Bar> listOfBarObjects) {
//internals
}
Ты прав
Определение заключается в том, что класс должен быть подтипом Something
Это так же, как Class<T>
, но есть условие, что T
должен extends Something
Или же implements Something
как предложил Энтони Акчиоли
Это также может быть класс Something
сам
Ты прав.
В дженериках Java ?
Оператор означает "любой класс". extends
Ключевое слово может быть использовано для определения того, что "любой класс, который расширяет / реализует Something
(или есть Something
).
Таким образом, у вас есть Class
некоторого класса, но этот класс должен быть или расширять / реализовывать Something
".
Ты прав.
Однако обычно вы хотите назвать класс, расширяющий Something, и написать, например, <E extends Something>
, Если вы используете ?
Вы не можете ничего сделать с данным типом позже.