В синтаксисе 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>, Если вы используете ? Вы не можете ничего сделать с данным типом позже.

Другие вопросы по тегам