diff --git a/src/org/redkale/util/TypeToken.java b/src/org/redkale/util/TypeToken.java index a9681a05c..642c052fa 100644 --- a/src/org/redkale/util/TypeToken.java +++ b/src/org/redkale/util/TypeToken.java @@ -73,6 +73,7 @@ public abstract class TypeToken { * } * public abstract class AService <K extends Key, V extends Val> { * public abstract V findValue(K key); + * public abstract Sheet<V> queryValue(K key); * } * public class Key2 extends Key { * } @@ -82,6 +83,9 @@ public abstract class TypeToken { * public Val2 findValue(Key2 key){ * return new Val2(); * } + * public Sheet<Val2> queryValue(Key2 key){ + * return new Sheet(); + * } * } * * @@ -92,7 +96,7 @@ public abstract class TypeToken { * @return Type */ public static Type getGenericType(final Type type, final Type declaringClass) { - if (declaringClass == null) return type; + if (type == null || declaringClass == null) return type; if (type instanceof TypeVariable) { if (declaringClass instanceof Class) { final Class declaringClass0 = (Class) declaringClass; @@ -117,6 +121,12 @@ public abstract class TypeToken { TypeVariable tv = (TypeVariable) type; if (tv.getBounds().length == 1) return tv.getBounds()[0]; } + if (type instanceof ParameterizedType) { + ParameterizedType pt = (ParameterizedType) type; + return createParameterizedType(getGenericType(pt.getOwnerType(), declaringClass), + getGenericType(pt.getRawType(), declaringClass), + getGenericType(pt.getActualTypeArguments(), declaringClass)); + } return type; }