SYNOPSIS
Valid generic types leading to compilation problems.
OPERATING SYSTEM(S)
All Platforms.
FULL JDK VERSION(S)
Seen on all releases of Java 5.0, Java 5.0, Java 6.0 and Java 7.0
PROBLEM DESCRIPTION
javac fails to compile these below given valid generic classes.
TESTCASE:
Case-1:
public class TestGeneric2<T extends Comparable<? super T>> {
public void test(T v) {
Object obj = v;
if (v instanceof Integer) {
obj = Long.valueOf(((Integer) v).longValue());
}
System.out.println(obj.getClass().getName());
}
}
Case-2:
public class TestGeneric3<T extends Comparable<? extends T>> {
public void test(T v) {
Object obj = v;
if (v instanceof Integer) {
obj = Long.valueOf(((Integer) v).longValue());
}
System.out.println(obj.getClass().getName());
}
}
REPRODUCTION INSTRUCTIONS
javac fails to compile the above two cases.
FAILURE OUTPUT
/* Sun Java 1.5 and 1.6 gives
TestGeneric2.java:4: inconvertible types
found : T
required: java.lang.Integer
if (v instanceof Integer) {
^
TestGeneric2.java:5: inconvertible types
found : T
required: java.lang.Integer
obj = Long.valueOf(((Integer) v).longValue());
^
2 errors
*/
javac compiles when the above generic classes are defined as "TestGeneric2<T extends Comparable<?>>"
Valid generic types leading to compilation problems.
OPERATING SYSTEM(S)
All Platforms.
FULL JDK VERSION(S)
Seen on all releases of Java 5.0, Java 5.0, Java 6.0 and Java 7.0
PROBLEM DESCRIPTION
javac fails to compile these below given valid generic classes.
TESTCASE:
Case-1:
public class TestGeneric2<T extends Comparable<? super T>> {
public void test(T v) {
Object obj = v;
if (v instanceof Integer) {
obj = Long.valueOf(((Integer) v).longValue());
}
System.out.println(obj.getClass().getName());
}
}
Case-2:
public class TestGeneric3<T extends Comparable<? extends T>> {
public void test(T v) {
Object obj = v;
if (v instanceof Integer) {
obj = Long.valueOf(((Integer) v).longValue());
}
System.out.println(obj.getClass().getName());
}
}
REPRODUCTION INSTRUCTIONS
javac fails to compile the above two cases.
FAILURE OUTPUT
/* Sun Java 1.5 and 1.6 gives
TestGeneric2.java:4: inconvertible types
found : T
required: java.lang.Integer
if (v instanceof Integer) {
^
TestGeneric2.java:5: inconvertible types
found : T
required: java.lang.Integer
obj = Long.valueOf(((Integer) v).longValue());
^
2 errors
*/
javac compiles when the above generic classes are defined as "TestGeneric2<T extends Comparable<?>>"
- duplicates
-
JDK-6981516 javac failed to compile generic class cast
-
- Closed
-
- relates to
-
JDK-7005095 Cast: compile reject sensible cast from final class to interface
-
- Closed
-
-
JDK-6569057 Generics regression on cast
-
- Closed
-
-
JDK-6790039 overhaul cast-conversion (umbrella)
-
- Closed
-
-
JDK-6270087 Javac rejects legal cast
-
- Closed
-
-
JDK-6507317 Problem when casting from parametrized type to concrete class
-
- Closed
-
(1 relates to)