Home >Java >javaTutorial >Java Generics: What\'s the Deal with the `? super` Keyword?

Java Generics: What\'s the Deal with the `? super` Keyword?

Susan Sarandon
Susan SarandonOriginal
2024-11-28 01:37:14226browse

Java Generics: What's the Deal with the `? super` Keyword?

Java Generics: Unraveling the Enigma of the 'Super' Keyword

Despite exploring various resources on generics, you still encounter confusion regarding the 'super' keyword. Let's delve into the intricacies of using 'super' in Java generics to clarify these doubts.

1. Unraveling the Contradiction with '? super Number'

When declaring a collection as 'List', you may assume that it can hold objects that are parents of Number. However, the opposite occurs: you can add Integers but not Objects.

The reason lies in capture conversion. 'List' can capture only types that can extend Number and its supertypes. Since Object is a superclass of Number, but not an extension, it cannot be captured. However, Integer is a subtype of Number, so it can be added.

2. Deciphering the Behavior with 'List' and 'test()'

Compiling 'test(sList);' fails because 'List' is not capture-convertible by 'List'. While String is a supertype of Object, Object is not an extension of Number. This violates the capture-conversion rules.

In summary, '? super T' denotes that the collection can hold objects of type T or any of its superclasses that are extension-compatible. However, this doesn't include all supertypes, only those that extend the specified type.

3. Why '' is Prohibited

Java doesn't allow '' because it leads to ambiguous situations. For instance, 'List' might capture both 'List' and 'List' (since Object is a supertype of all objects). This would violate generic type safety.

The above is the detailed content of Java Generics: What\'s the Deal with the `? super` Keyword?. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn