-
Sub-task
-
Resolution: Won't Fix
-
P3
-
None
-
8
-
unknown
-
generic
The following code compiles even if it shouldn't:
1)
class Foo<X> {
X x;
}
class Test {
void m(int i) { }
void test(Foo<? extends Integer> fi) {
m(fi.x);
}
}
2)
class Test<T extends Integer> {
void i(int arg) {}
void foo(T arg) { i(arg); }
}
3)
class CaptureTest {
<T> List<T> singleton(T arg) { return null; }
void test(List<? extends Number> l) {
List<Number> ln = singleton(l.get(0));
}
}
1)
class Foo<X> {
X x;
}
class Test {
void m(int i) { }
void test(Foo<? extends Integer> fi) {
m(fi.x);
}
}
2)
class Test<T extends Integer> {
void i(int arg) {}
void foo(T arg) { i(arg); }
}
3)
class CaptureTest {
<T> List<T> singleton(T arg) { return null; }
void test(List<? extends Number> l) {
List<Number> ln = singleton(l.get(0));
}
}