Captured wildcards
Maurizio Cimadamore
maurizio.cimadamore at oracle.com
Thu Mar 19 12:22:49 UTC 2015
Upper bound should always be used - although I'm not 100% sure of what
should happen when an upper bound is an intersection type:
interface A { }
interface B { }
class E implements A, B { }
class Foo<X extends A & B> {
X x;
Foo(X x) {
this.x = x;
}
X get() {
return x;
}
}
Foo<?> foo = new Foo<>(new E());
foo.get(); //???
Maurizio
On 19/03/15 11:28, Jan Lahoda wrote:
> Hello,
>
> Assume this declaration:
> List<? extends String> list = Arrays.asList("a");
>
> This expression fails:
> -> list.iterator().next()
> | Error:
> | illegal start of type
> | list.iterator().next()
> | ^
>
> The reason is that "? extends String" is used as the type of the
> expression, instead of "String":
> ---
> package REPL;
> import java.util.regex.*;import java.util.*;import
> java.util.concurrent.*;import java.util.prefs.*;import
> java.net.*;import java.io.*;import java.math.*;import static
> REPL.$REPL8.printf;
> import static REPL.$REPL9.list;
> public class $REPL11 {
> public static
> ? extends String $2;
> public static Object do_it$() throws Throwable {
> return $2 =
> list.iterator().next();
> }
> }
> ---
>
> Attached is a possible fix - what do you think?
>
> Thanks,
> Jan
More information about the kulla-dev
mailing list