что означает список mean? [дубликат]
На этот вопрос уже есть ответ здесь:
- Java Generics (Wildcards) 7 ответов
- List > vs List расширяет карту > 5 ответов
Я увидел, что определение в protobuf генерируется Ява файл:
java.util.List<? extends xxx.yyy.zzz.proto.BasicMessage.DestInfoOrBuilder> foo();
Но что означают дозы <?
и extends
? Я могу понять List<SomeClass>
я не могу понять List<? extends SomeClass>
..3 ответа:
Это общее объявление.
Используется для проверки типов во время компиляции. Вы можете поместить любой объект в список, но это сделает его более трудным для обслуживания и может вызвать
ClassCastException
s, Если не использовать его соответствующим образом.
<? 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 Универсальные подстановочные знаки и универсальные символы: оператор подстановочных знаков