提交 8eaf586c 编写于 作者: M mcimadamore

7034511: Loophole in typesafety

Summary: Type-variable substutution takes upper bound of replaced captured type-variable
Reviewed-by: dlsmith
上级 5ec39895
......@@ -2309,7 +2309,7 @@ public class Types {
if (elemtype == t.elemtype)
return t;
else
return new ArrayType(upperBound(elemtype), t.tsym);
return new ArrayType(elemtype, t.tsym);
}
@Override
......
/*
* @test /nodynamiccopyright/
* @bug 7034511
* @summary Loophole in typesafety
* @compile/fail/ref=T7034511a.out -XDrawDiagnostics T7034511a.java
*/
class T7034511a {
interface A<T> {
void foo(T x);
}
interface B<T> extends A<T[]> { }
static abstract class C implements B<Integer> {
<T extends B<?>> void test(T x, String[] ss) {
x.foo(ss);
}
}
}
T7034511a.java:18:14: compiler.err.cant.apply.symbol.1: kindname.method, foo, compiler.misc.type.captureof: 1, ?[], java.lang.String[], kindname.interface, T7034511a.A<T>, (compiler.misc.no.conforming.assignment.exists: java.lang.String[], compiler.misc.type.captureof: 1, ?[])
1 error
/*
* @test /nodynamiccopyright/
* @bug 7034511
* @summary Loophole in typesafety
* @compile/fail/ref=T7034511b.out -XDrawDiagnostics T7034511b.java
*/
class T7034511b {
static class MyList<E> {
E toArray(E[] e) { return null; }
}
void test(MyList<?> ml, Object o[]) {
ml.toArray(o);
}
}
T7034511b.java:14:11: compiler.err.cant.apply.symbol.1: kindname.method, toArray, compiler.misc.type.captureof: 1, ?[], java.lang.Object[], kindname.class, T7034511b.MyList<E>, (compiler.misc.no.conforming.assignment.exists: java.lang.Object[], compiler.misc.type.captureof: 1, ?[])
1 error
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册