O conceito é simples de entender
List<? extends T>
Indica que todas as subclasses do tipo T existem na coleção, incluindo o próprio TList<? super T>
Indica que todas as coleções são armazenadas na classe pai do tipo T, incluindo o próprio T
Interpretação de exemplos de código
Código da classe pai-filho:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
|
gráfico de relação:
Código de teste:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
|
Sobre a lista<?super T>
adicionar aspecto
1 |
|
1 |
|
A execução da linha de código acima não é permitida, pois o tipo de coleção de listA é Animal ou uma classe pai superior. Pense nisso, se o tipo representado for Animal, como posso adicionar sua classe pai Biológica? Claro que não é permitido.
1 2 |
|
A execução das duas sentenças acima pode ser executada normalmente, pois seja Animal ou a subclasse Dog de Animal, ela pode ser armazenada na coleção da classe pai cujo tipo de coleção é Animal ou superior. Um pouco complicado, mas é isso que significa.
1 |
|
Obviamente, adicionar Flower não é possível, porque não é uma subclasse de Animal.
aspecto do valor de retorno
1 |
|
Como o tipo de coleção de listA é Animal ou uma classe pai superior, não está claro qual classe será, mas todos devemos saber que a classe pai de todas as classes é Object, então o valor de retorno é do tipo Object.
Sobre a lista<?extendsT>
adicionar aspecto
1 |
|
1 |
|
A execução do código acima não é permitida, pois o tipo de coleção da listaB é Plant ou uma subclasse de Plant. Pense bem, se o tipo representado é Tree, uma subclasse de Plant, como ele pode adicionar sua classe pai Plant? Portanto, é semelhante ao entendimento acima, que é o entendimento inverso. Pode ficar mais claro olhando a foto.
1 |
|
Da mesma forma, como representar o tipo é a subclasse Rose (rosa) de Flor, então é claro que não é possível adicionar sua classe pai Flor.
1 |
|
Este é o caso especial, você pode adicionar nulo, mas não faz sentido.
aspecto do valor de retorno
1 |
|
Como o tipo de coleção de listB é Plant ou suas subclasses, não está claro qual classe será, mas podemos saber que o tipo mais alto é Plant, portanto o valor de retorno é do tipo Plant.
Resumir
- List<?estende T> significa que todas as classes pai do tipo T são armazenadas na coleção, incluindo o próprio T
- add: Não é possível adicionar nenhum objeto (caso especial: nulo pode ser adicionado)
- get: O tipo de objeto retornado por get é T
- List<? superT>表示该集合中存在的都是类型T的子类,包括T自己
- add:只能添加T及T的子类
- get:get返回的对象类型为Object
本篇文章就到这里了,希望能给你带来帮助,也希望您能够多多关注脚本之家的更多内容!