Wildcard (Java): Difference between revisions

Content deleted Content added
Covariance for generic types: Fix in-line citation issues
Example: Lists: Remove final keyword for function parameters
 
Line 71:
A <code>List<? '''extends''' MyClass></code> is a list of objects of some subclass of <code>MyClass</code>, i.e. any object in the list is guaranteed to be of type <code>MyClass</code>, so one can iterate over it using a variable of type <code>MyClass</code><ref>[[Inheritance (object-oriented programming)]]</ref>
<syntaxhighlight lang="java">
public void doSomething(final List<? extends MyClass> list) {
for (final MyClass object : list) { // OK
// do something
Line 79:
However, it is not guaranteed that one can add any object of type <code>MyClass</code> to that list:
<syntaxhighlight lang="java">
public void doSomething(final List<? extends MyClass> list) {
final MyClass m = new MyClass();
list.add(m); // Compile error
Line 88:
A <code>List<? '''super''' MyClass></code> is a list of objects of some superclass of <code>MyClass</code>, i.e. the list is guaranteed to be able to contain any object of type <code>MyClass</code>, so one can add any object of type <code>MyClass</code>:
<syntaxhighlight lang="java">
public void doSomething(final List<? super MyClass> list) {
final MyClass m = new MyClass();
list.add(m); // OK
Line 95:
However, it is not guaranteed that one can iterate over that list using a variable of type <code>MyClass</code>:
<syntaxhighlight lang="java">
public void doSomething(final List<? super MyClass> list) {
for (final MyClass object : list) { // Compile error
// do something