public class GenericTypeExtractor
extends java.lang.Object
Constructor and Description |
---|
GenericTypeExtractor() |
Modifier and Type | Method and Description |
---|---|
private static java.lang.Class<?> |
extractGeneric(java.lang.reflect.Type type)
Attempts to extract generic parameter type of given type.
|
private static java.lang.reflect.Type |
findGenericInterface(java.lang.Class<?> sourceClass,
java.lang.Class<?> targetBaseInterface)
Finds generic interface implementation based on the source class and the target interface.
|
static java.lang.Class<?> |
genericTypeOf(java.lang.Class<?> rootClass,
java.lang.Class<?> targetBaseClass,
java.lang.Class<?> targetBaseInterface)
Extract generic type of root class either from the target base class or from target base interface.
|
public static java.lang.Class<?> genericTypeOf(java.lang.Class<?> rootClass, java.lang.Class<?> targetBaseClass, java.lang.Class<?> targetBaseInterface)
1. Foo implements IFoo[Integer]: genericTypeOf(Foo.class, Object.class, IFoo.class) returns Integer
2. Foo extends BaseFoo[String]: genericTypeOf(Foo.class, BaseFoo.class, IFoo.class) returns String
3. Foo extends BaseFoo; BaseFoo implements IFoo[String]: genericTypeOf(Foo.class, BaseFoo.class, Object.class) returns String
Does not support nested generics, only supports single type parameter.
rootClass
- - the root class that the search begins fromtargetBaseClass
- - if one of the classes in the root class' hierarchy extends this base class
it will be used for generic type extractiontargetBaseInterface
- - if one of the interfaces in the root class' hierarchy implements this interface
it will be used for generic type extractionprivate static java.lang.reflect.Type findGenericInterface(java.lang.Class<?> sourceClass, java.lang.Class<?> targetBaseInterface)
private static java.lang.Class<?> extractGeneric(java.lang.reflect.Type type)