что означает список mean? [дубликат]


На этот вопрос уже есть ответ здесь:

Я увидел, что определение в protobuf генерируется Ява файл:

java.util.List<? extends xxx.yyy.zzz.proto.BasicMessage.DestInfoOrBuilder> foo();
Но что означают дозы <? и extends? Я могу понять List<SomeClass> я не могу понять List<? extends SomeClass>..
3 2

3 ответа:

Это общее объявление.

Используется для проверки типов во время компиляции. Вы можете поместить любой объект в список, но это сделает его более трудным для обслуживания и может вызвать ClassCastExceptions, Если не использовать его соответствующим образом.

<? extends xxx.yyy.zzz.proto.BasicMessage.DestInfoOrBuilder> означает " разрешить каждый класс, который расширяет DestInfoOrBuilder".

В программировании Java generics существует два вида границ при использовании подстановочных знаков.

1) Верхние Ограниченные Подстановочные Знаки . например: ArrayList <? extends Number> p, это означает, что вы можете использовать любое расширяющее число для заполнения списка ArrayList.

2) Нижние Ограниченные Подстановочные Знаки. например: ArrayList<? super Integer> list, это означает,что вы должны передать все, что является суперклассом (например, число, объект)целого числа, чтобы заполнить ArrayList.

Дополнительную информацию смотрите в разделе подстановочные знаки.

В java generic code, знак вопроса (?) , называемый подстановочным знаком, представляет собой неизвестный тип. Подстановочный знак может использоваться в самых разных ситуациях: как тип параметра, поля или локальной переменной; иногда как тип возвращаемого значения (хотя в практике программирования лучше быть более конкретным). Подстановочный знак никогда не используется в качестве аргумента типа для вызова универсального метода, создания экземпляра универсального класса или супертайпа.

Для получения дополнительной информации прочитайте Java Универсальные подстановочные знаки и универсальные символы: оператор подстановочных знаков