|
Relates :
|
|
|
Relates :
|
|
|
Relates :
|
FULL PRODUCT VERSION :
build 1.8.0-b132
ADDITIONAL OS VERSION INFORMATION :
Linux ivostmaina 3.13.6-gentoo #1 SMP Thu Mar 20 02:22:16 CET 2014 x86_64 AMD FX(tm)-8350 Eight-Core Processor AuthenticAMD GNU/Linux
A DESCRIPTION OF THE PROBLEM :
This Bug maybe related to Bug: https://bugs.openjdk.java.net/browse/JDK-8038994
If getAnnotatedParameterTypes() is used on an Exectuable instance (Method or Constructor) which have got generic type parameters, the returned AnnotatedType.getType() may return the class type instead of a ParameterizedType instance. getGenericParameterTypes() returns the right types.
For all i, I expect
Exectuable.getAnnotatedParameterTypes()[i].getType() equals Exectuable.getGenericParameterTypes()[i]
Example:
class TestClass {
void foobar(List<T> x);
}
Method m; is the reflection object for method "foobar"
m.getAnnotatedParameterTypes[0].getType() returns List.class instead of an instance to a ParameterizedType instance
m.getGenericParameterTypes()[0] returns as expected a ParameterizedType instance
REGRESSION. Last worked in version 8
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
see test case
REPRODUCIBILITY :
This bug can be reproduced always.
---------- BEGIN SOURCE ----------
@Test
public void java8_executable_getAnnotatedParameterTypes_v1()
throws NoSuchMethodException, SecurityException {
class MyClass<T> {
}
class MySecondClass<T> {
@SuppressWarnings("unused")
public MyClass<T> get(MyClass<T> p) {
return p;
}
}
Method method = MySecondClass.class.getMethod("get", MyClass.class);
AnnotatedType at = method.getAnnotatedParameterTypes()[0];
// at.getType() is MyClass.class in build 1.8.0-b132
Type t = method.getGenericParameterTypes()[0];
// t is ParameterizedType of MyClass
assertEquals(t, at.getType());
assertEquals(at.getType(), t);
}
---------- END SOURCE ----------
SUPPORT :
YES
|