-
Bug
-
Resolution: Duplicate
-
P3
-
None
-
7
-
os_x
FULL PRODUCT VERSION :
javac -version
javac 1.7.0_07
ADDITIONAL OS VERSION INFORMATION :
OS-independent
EXTRA RELEVANT SYSTEM CONFIGURATION :
not configuration-specific
A DESCRIPTION OF THE PROBLEM :
(See also discussion here: http://stackoverflow.com/questions/529085/java-how-to-generic-array-creation)
Code alternative(1) compiles without warnings as it should, but code alternative(2) produces an " unchecked cast " warning.
Common for both:
class Foo<T> {
Foo( T [] arg ) {
}
}
Alternative (1):
class Bar<T> extends Foo<T> {
protected static final Object [] EMPTY_ARRAY = {};
@SuppressWarnings( " unchecked " )
Bar() {
super( (T []) EMPTY_ARRAY );
}
}
Alternative (2):
class Bar<T> extends Foo<T> {
@SuppressWarnings( " unchecked " )
Bar() {
super( (T []) EMPTY_ARRAY );
}
protected static final Object [] EMPTY_ARRAY = {};
}
Alternative (2) produces:
javac -Xlint:unchecked Foo.java Bar.java
Bar.java:4: warning: [unchecked] unchecked cast
super( (T []) EMPTY_ARRAY );
^
required: T[]
found: Object[]
where T is a type-variable:
T extends Object declared in class Bar
1 warning
REGRESSION. Last worked in version 6u31
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
Compile above code samples.
EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
I expect the @SuppressWarnings to be honored. I also expect that the compiler output does not depend on whether I declare a static variable first or last.
REPRODUCIBILITY :
This bug can be reproduced always.
CUSTOMER SUBMITTED WORKAROUND :
Reorder declarations.
javac -version
javac 1.7.0_07
ADDITIONAL OS VERSION INFORMATION :
OS-independent
EXTRA RELEVANT SYSTEM CONFIGURATION :
not configuration-specific
A DESCRIPTION OF THE PROBLEM :
(See also discussion here: http://stackoverflow.com/questions/529085/java-how-to-generic-array-creation)
Code alternative(1) compiles without warnings as it should, but code alternative(2) produces an " unchecked cast " warning.
Common for both:
class Foo<T> {
Foo( T [] arg ) {
}
}
Alternative (1):
class Bar<T> extends Foo<T> {
protected static final Object [] EMPTY_ARRAY = {};
@SuppressWarnings( " unchecked " )
Bar() {
super( (T []) EMPTY_ARRAY );
}
}
Alternative (2):
class Bar<T> extends Foo<T> {
@SuppressWarnings( " unchecked " )
Bar() {
super( (T []) EMPTY_ARRAY );
}
protected static final Object [] EMPTY_ARRAY = {};
}
Alternative (2) produces:
javac -Xlint:unchecked Foo.java Bar.java
Bar.java:4: warning: [unchecked] unchecked cast
super( (T []) EMPTY_ARRAY );
^
required: T[]
found: Object[]
where T is a type-variable:
T extends Object declared in class Bar
1 warning
REGRESSION. Last worked in version 6u31
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
Compile above code samples.
EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
I expect the @SuppressWarnings to be honored. I also expect that the compiler output does not depend on whether I declare a static variable first or last.
REPRODUCIBILITY :
This bug can be reproduced always.
CUSTOMER SUBMITTED WORKAROUND :
Reorder declarations.
- duplicates
-
JDK-8016099 Some @SuppressWarnings annotations ignored ( unchecked, rawtypes )
- Closed