Possible regression involving inferred generic types
Liam Miller-Cushon
cushon at google.com
Wed Oct 16 16:08:12 PDT 2013
Hi all,
The following programs do not compile with the jdk8 javac. (I tried b111 and
954dd199d6ff). All of the programs compile with the jdk7 javac.
-------------------------------------------------------------------------------
import java.util.List;
class ReproOne {
static class Baz<T> {
public static List<Baz<Object>> getElements(Baz<Object> transcoder) {
return null;
}
}
private static void bar(Baz arg) {
for (Baz element : Baz.getElements(arg)) {}
}
}
-------------------------------------------------------------------------------
abstract class ReproTwo<T> {
class Bar<E> {}
T get(Bar<? extends T> arg1, Bar arg2) {
return circularGet(arg2, arg2);
}
abstract T circularGet(final Bar<? extends T> arg1, final Bar<?> arg2);
}
-------------------------------------------------------------------------------
abstract class ReproThree<T, V> {
class Binding<E> {}
class ProviderBinding<E> extends Binding<E> {}
abstract V visitOther(Binding<? extends T> binding);
public V visitTwo(ProviderBinding<? extends T> providerBinding) {
return visitOther((Binding) providerBinding);
}
}
-------------------------------------------------------------------------------
javac output:
ReproOne.java:12: error: incompatible types: Object cannot be converted to
Baz
for (Baz element : Baz.getElements(arg)) {}
^
ReproTwo.java:6: error: incompatible types: Object cannot be converted to T
return circularGet(arg2, arg2);
^
where T is a type-variable:
T extends Object declared in class ReproTwo
ReproThree.java:10: error: incompatible types: Object cannot be converted
to V
return visitOther((Binding) providerBinding);
^
where V is a type-variable:
V extends Object declared in class ReproThree
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mail.openjdk.java.net/pipermail/compiler-dev/attachments/20131016/d237a878/attachment.html
More information about the compiler-dev
mailing list