FULL PRODUCT VERSION :
java version "1.6.0_21"
Java(TM) SE Runtime Environment (build 1.6.0_21-b07)
Java HotSpot(TM) Client VM (build 17.0-b17, mixed mode, sharing)
ADDITIONAL OS VERSION INFORMATION :
Microsoft Windows XP [Version 5.1.2600]
A DESCRIPTION OF THE PROBLEM :
The Java compiler is able to infer the return value of the getValue() method in the example below when the value is assigned to a reference type, but not when it is assigned to a primitive. Since primitives can't be used as generic type arguments, it seems like the compiler should be able to infer the wrapper type from the primitive and use auto-boxing to perform the assignment.
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
Attempt to compile the provided sample code. Compiler errors are generated for lines 6 and 9.
EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
The program should compile.
ACTUAL -
The program does not compile.
ERROR MESSAGES/STACK TRACES THAT OCCUR :
Line 6 produces: "type parameters of <T>T cannot be determined; no unique maximal instance exists for type variable T with upper bounds int,java.lang.Object"
Line 9 produces: "type parameters of <T>T cannot be determined; no unique maximal instance exists for type variable T with upper bounds float,java.lang.Object"
REPRODUCIBILITY :
This bug can be reproduced always.
---------- BEGIN SOURCE ----------
package com.foo;
public class PrimitiveTypeInferenceTest {
public static void main(String[] args) {
Integer i1 = getValue();
int i2 = getValue();
Float f1 = getValue();
float f2 = getValue();
}
@SuppressWarnings("unchecked")
public static <T> T getValue() {
Object o = 0;
return (T)o;
}
}
---------- END SOURCE ----------
CUSTOMER SUBMITTED WORKAROUND :
Workaround is to cast return value to appropriate wrapper type before performing assignment:
int i2 = (Integer)getValue();
float f2 = (Float)getValue();
java version "1.6.0_21"
Java(TM) SE Runtime Environment (build 1.6.0_21-b07)
Java HotSpot(TM) Client VM (build 17.0-b17, mixed mode, sharing)
ADDITIONAL OS VERSION INFORMATION :
Microsoft Windows XP [Version 5.1.2600]
A DESCRIPTION OF THE PROBLEM :
The Java compiler is able to infer the return value of the getValue() method in the example below when the value is assigned to a reference type, but not when it is assigned to a primitive. Since primitives can't be used as generic type arguments, it seems like the compiler should be able to infer the wrapper type from the primitive and use auto-boxing to perform the assignment.
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
Attempt to compile the provided sample code. Compiler errors are generated for lines 6 and 9.
EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
The program should compile.
ACTUAL -
The program does not compile.
ERROR MESSAGES/STACK TRACES THAT OCCUR :
Line 6 produces: "type parameters of <T>T cannot be determined; no unique maximal instance exists for type variable T with upper bounds int,java.lang.Object"
Line 9 produces: "type parameters of <T>T cannot be determined; no unique maximal instance exists for type variable T with upper bounds float,java.lang.Object"
REPRODUCIBILITY :
This bug can be reproduced always.
---------- BEGIN SOURCE ----------
package com.foo;
public class PrimitiveTypeInferenceTest {
public static void main(String[] args) {
Integer i1 = getValue();
int i2 = getValue();
Float f1 = getValue();
float f2 = getValue();
}
@SuppressWarnings("unchecked")
public static <T> T getValue() {
Object o = 0;
return (T)o;
}
}
---------- END SOURCE ----------
CUSTOMER SUBMITTED WORKAROUND :
Workaround is to cast return value to appropriate wrapper type before performing assignment:
int i2 = (Integer)getValue();
float f2 = (Float)getValue();
- duplicates
-
JDK-6995200 JDK 7 compiler crashes when type-variable is inferred from expected primitive type
-
- Closed
-