Ccna final exam - java, php, javascript, ios, cshap all in one. This is a collaboratively edited question and answer site for professional and enthusiast programmers. It's 100% free, no registration required.
Monday, January 30, 2012
Generic Parameter instantiation discovery with Java Reflection
Consider the following scenario:
class A<T> {}
class B extends A<Integer> {}
How can I know through reflection in Java that in B , the T type variable was instantiated as an Integer ?
// TODO: Check that there *are* type arguments Type firstTypeArgument = parameterized.getActualTypeArguments()[0];
Short but complete example:
import java.lang.reflect.*;
class A<T> {} class B extends A<Integer> {}
public class Test { public static void main(String[] args) { Type type = B.class.getGenericSuperclass(); ParameterizedType parameterized = (ParameterizedType) type; // Prints class java.lang.Integer System.out.println(parameterized.getActualTypeArguments()[0]); } }
You can use
ReplyDeleteType type = B.class.getGenericSuperclass();
// TODO: check with instanceof first?
ParameterizedType parameterized = (ParameterizedType) type;
// TODO: Check that there *are* type arguments
Type firstTypeArgument = parameterized.getActualTypeArguments()[0];
Short but complete example:
import java.lang.reflect.*;
class A<T> {}
class B extends A<Integer> {}
public class Test {
public static void main(String[] args) {
Type type = B.class.getGenericSuperclass();
ParameterizedType parameterized = (ParameterizedType) type;
// Prints class java.lang.Integer
System.out.println(parameterized.getActualTypeArguments()[0]);
}
}