Java Reflection Java Java API
Class:
java.lang.reflect.Method
Method:
public Type getGenericReturnType()
Returns a
Type
object that represents the formal return type of the method represented by this
Method
object.
Examples
package com.logicbig.example.method;
import java.lang.reflect.Method; import java.lang.reflect.Type; import java.lang.reflect.TypeVariable; import java.util.Arrays; import java.util.Objects;
public class GetGenericReturnTypeExample<N extends Number> {
public N process() {return null;}
public static void main(String... args) throws NoSuchMethodException { Method m = GetGenericReturnTypeExample.class.getDeclaredMethod("process"); Type t = m.getGenericReturnType(); printType(t, 1); }
private static void printType(Type type, int level) { if (type == null) { return; } print(level, "type: " + Objects.toString(type)); if (type instanceof TypeVariable) { print(level, "type is an instance of TypeVariable"); printTypeVariable((TypeVariable) type, level + 1); } else if (type instanceof Class) { print(level, "type is an instance of Class"); print(level, "Class Name: " + ((Class) type).getName()); } else { throw new RuntimeException(); } }
private static void printTypeVariable(TypeVariable type, int level) { print(level, "TypeVariable#getName(): " + type.getName()); Type[] bounds = type.getBounds(); print(level, "TypeVariable#getBounds(): " + Arrays.toString(bounds)); for (Type bound : bounds) { print(level, "TypeVariable#bound: " + bound); printType(bound, level + 1); } }
private static void print(int level, String string) { System.out.printf("%" + (level * 4 - 3) + "s\u00A6- %s%n", "", string); } }
Output ¦- type: N ¦- type is an instance of TypeVariable ¦- TypeVariable#getName(): N ¦- TypeVariable#getBounds(): [class java.lang.Number] ¦- TypeVariable#bound: class java.lang.Number ¦- type: class java.lang.Number ¦- type is an instance of Class ¦- Class Name: java.lang.Number
package com.logicbig.example.method;
import java.lang.reflect.*; import java.util.Arrays; import java.util.Objects;
public class GetGenericReturnTypeExample2<N extends Number> {
public N[] process() {return null;}
public static void main(String... args) throws NoSuchMethodException { Method m = GetGenericReturnTypeExample2.class.getDeclaredMethod("process"); Type type = m.getGenericReturnType(); printType(type, 1); }
private static void printType(Type type, int level) { if (type == null) { return; } print(level, "type: " + Objects.toString(type)); if (type instanceof TypeVariable) { print(level, "type is an instance of TypeVariable"); printTypeVariable((TypeVariable) type, level + 1); } else if (type instanceof Class) { print(level, "type is an instance of Class"); print(level, "Class Name: " + ((Class) type).getName()); } else if (type instanceof GenericArrayType) { print(level, "type is an instance of GenericArrayType"); printGenericArrayType((GenericArrayType) type, level + 1); } else { throw new RuntimeException(); } }
private static void printGenericArrayType(GenericArrayType type, int level) { Type componentType = type.getGenericComponentType(); print(level, "GenericArrayType#getGenericComponentType(): " + componentType); printType(componentType, level + 1); }
private static void printTypeVariable(TypeVariable type, int level) { print(level, "TypeVariable#getName(): " + type.getName()); Type[] bounds = type.getBounds(); print(level, "TypeVariable#getBounds(): " + Arrays.toString(bounds)); for (Type bound : bounds) { print(level, "TypeVariable#bound: " + bound); printType(bound, level + 1); } }
private static void print(int level, String string) { System.out.printf("%" + (level * 4 - 3) + "s\u00A6- %s%n", "", string); } }
Output ¦- type: N[] ¦- type is an instance of GenericArrayType ¦- GenericArrayType#getGenericComponentType(): N ¦- type: N ¦- type is an instance of TypeVariable ¦- TypeVariable#getName(): N ¦- TypeVariable#getBounds(): [class java.lang.Number] ¦- TypeVariable#bound: class java.lang.Number ¦- type: class java.lang.Number ¦- type is an instance of Class ¦- Class Name: java.lang.Number
package com.logicbig.example.method;
import java.lang.reflect.*; import java.util.Arrays; import java.util.List; import java.util.Objects;
public class GetGenericReturnTypeExample3<N extends Number> {
public List<N> process() {return null;}
public static void main(String... args) throws NoSuchMethodException { Method m = GetGenericReturnTypeExample3.class.getDeclaredMethod("process"); Type type = m.getGenericReturnType(); printType(type, 1); }
private static void printType(Type type, int level) { if (type == null) { return; } print(level, "type: " + Objects.toString(type)); if (type instanceof TypeVariable) { print(level, "type is an instance of TypeVariable"); printTypeVariable((TypeVariable) type, level + 1); } else if (type instanceof Class) { print(level, "type is an instance of Class"); print(level, "Class Name: " + ((Class) type).getName()); } else if (type instanceof ParameterizedType) { print(level, "type is an instance of ParameterizedType"); printParameterizeType((ParameterizedType) type, level + 1); } else { throw new RuntimeException(); } }
private static void printParameterizeType(ParameterizedType type, int level) { Type ownerType = type.getOwnerType(); print(level, "ParameterizedType#getOwnerType(): " + ownerType); printType(ownerType, level + 1); Type rawType = type.getRawType(); print(level, "ParameterizedType#getRawType(): " + rawType); printType(rawType, level + 1); Type[] types = type.getActualTypeArguments(); print(level, "ParameterizedType#getActualTypeArguments(): " + Arrays.toString(types)); for (Type type1 : types) { print(level, "ParameterizedType#actualTypeArgument: " + type1); printType(type1, level + 1); } }
private static void printTypeVariable(TypeVariable type, int level) { print(level, "TypeVariable#getName(): " + type.getName()); Type[] bounds = type.getBounds(); print(level, "TypeVariable#getBounds(): " + Arrays.toString(bounds)); for (Type bound : bounds) { print(level, "TypeVariable#bound: " + bound); printType(bound, level + 1); } }
private static void print(int level, String string) { System.out.printf("%" + (level * 4 - 3) + "s\u00A6- %s%n", "", string); } }
Output ¦- type: java.util.List<N> ¦- type is an instance of ParameterizedType ¦- ParameterizedType#getOwnerType(): null ¦- ParameterizedType#getRawType(): interface java.util.List ¦- type: interface java.util.List ¦- type is an instance of Class ¦- Class Name: java.util.List ¦- ParameterizedType#getActualTypeArguments(): [N] ¦- ParameterizedType#actualTypeArgument: N ¦- type: N ¦- type is an instance of TypeVariable ¦- TypeVariable#getName(): N ¦- TypeVariable#getBounds(): [class java.lang.Number] ¦- TypeVariable#bound: class java.lang.Number ¦- type: class java.lang.Number ¦- type is an instance of Class ¦- Class Name: java.lang.Number
package com.logicbig.example.method;
import javax.swing.*; import java.lang.reflect.Method; import java.lang.reflect.ParameterizedType; import java.lang.reflect.Type; import java.lang.reflect.WildcardType; import java.util.Arrays; import java.util.Map; import java.util.Objects;
public class GetGenericReturnTypeExample4 { Map<? extends Number, ? super JFormattedTextField> process() {return null;}
public static void main(String... args) throws NoSuchMethodException { Method m = GetGenericReturnTypeExample4.class.getDeclaredMethod("process"); Type type = m.getGenericReturnType(); printType(type, 1); }
private static void printType(Type type, int level) { if (type == null) { return; } print(level, "type: " + Objects.toString(type)); if (type instanceof Class) { print(level, "type is an instance of Class"); print(level, "Class Name: " + ((Class) type).getName()); } else if (type instanceof ParameterizedType) { print(level, "type is an instance of ParameterizedType"); printParameterizeType((ParameterizedType) type, level + 1); } else if (type instanceof WildcardType) { print(level, "type is an instance of WildcardType"); printWildcardType((WildcardType) type, level + 1); } else { throw new RuntimeException(); } }
private static void printWildcardType(WildcardType type, int level) { Type[] lowerBounds = type.getLowerBounds(); print(level, "WildcardType#getLowerBounds(): " + Arrays.toString(lowerBounds)); for (Type lowerBound : lowerBounds) { print(level, "WildcardType#lowerBound: " + lowerBound); printType(lowerBound, level + 1); } Type[] upperBounds = type.getUpperBounds(); print(level, "WildcardType#getUpperBounds(): " + Arrays.toString(upperBounds)); for (Type upperBound : upperBounds) { print(level, "WildcardType#upperBound: " + upperBound); printType(upperBound, level + 1); } }
private static void printParameterizeType(ParameterizedType type, int level) { Type ownerType = type.getOwnerType(); print(level, "ParameterizedType#getOwnerType(): " + ownerType); printType(ownerType, level + 1); Type rawType = type.getRawType(); print(level, "ParameterizedType#getRawType(): " + rawType); printType(rawType, level + 1); Type[] types = type.getActualTypeArguments(); print(level, "ParameterizedType#getActualTypeArguments(): " + Arrays.toString(types)); for (Type type1 : types) { print(level, "ParameterizedType#actualTypeArgument: " + type1); printType(type1, level + 1); } }
private static void print(int level, String string) { System.out.printf("%" + (level * 4 - 3) + "s\u00A6- %s%n", "", string); } }
Output ¦- type: java.util.Map<? extends java.lang.Number, ? super javax.swing.JFormattedTextField> ¦- type is an instance of ParameterizedType ¦- ParameterizedType#getOwnerType(): null ¦- ParameterizedType#getRawType(): interface java.util.Map ¦- type: interface java.util.Map ¦- type is an instance of Class ¦- Class Name: java.util.Map ¦- ParameterizedType#getActualTypeArguments(): [? extends java.lang.Number, ? super javax.swing.JFormattedTextField] ¦- ParameterizedType#actualTypeArgument: ? extends java.lang.Number ¦- type: ? extends java.lang.Number ¦- type is an instance of WildcardType ¦- WildcardType#getLowerBounds(): [] ¦- WildcardType#getUpperBounds(): [class java.lang.Number] ¦- WildcardType#upperBound: class java.lang.Number ¦- type: class java.lang.Number ¦- type is an instance of Class ¦- Class Name: java.lang.Number ¦- ParameterizedType#actualTypeArgument: ? super javax.swing.JFormattedTextField ¦- type: ? super javax.swing.JFormattedTextField ¦- type is an instance of WildcardType ¦- WildcardType#getLowerBounds(): [class javax.swing.JFormattedTextField] ¦- WildcardType#lowerBound: class javax.swing.JFormattedTextField ¦- type: class javax.swing.JFormattedTextField ¦- type is an instance of Class ¦- Class Name: javax.swing.JFormattedTextField ¦- WildcardType#getUpperBounds(): [class java.lang.Object] ¦- WildcardType#upperBound: class java.lang.Object ¦- type: class java.lang.Object ¦- type is an instance of Class ¦- Class Name: java.lang.Object
package com.logicbig.example.method;
import java.lang.reflect.Method; import java.lang.reflect.ParameterizedType; import java.lang.reflect.Type; import java.lang.reflect.WildcardType; import java.util.Arrays; import java.util.List; import java.util.Objects;
public class GetGenericReturnTypeExample5 { List<?> process() {return null;}
public static void main(String... args) throws NoSuchMethodException { Method m = GetGenericReturnTypeExample5.class.getDeclaredMethod("process"); Type type = m.getGenericReturnType(); printType(type, 1); }
private static void printType(Type type, int level) { if (type == null) { return; } print(level, "type: " + Objects.toString(type)); if (type instanceof Class) { print(level, "type is an instance of Class"); print(level, "Class Name: " + ((Class) type).getName()); } else if (type instanceof ParameterizedType) { print(level, "type is an instance of ParameterizedType"); printParameterizeType((ParameterizedType) type, level + 1); } else if (type instanceof WildcardType) { print(level, "type is an instance of WildcardType"); printWildcardType((WildcardType) type, level + 1); } else { throw new RuntimeException(); } }
private static void printWildcardType(WildcardType type, int level) { Type[] lowerBounds = type.getLowerBounds(); print(level, "WildcardType#getLowerBounds(): " + Arrays.toString(lowerBounds)); for (Type lowerBound : lowerBounds) { print(level, "WildcardType#lowerBound: " + lowerBound); printType(lowerBound, level + 1); } Type[] upperBounds = type.getUpperBounds(); print(level, "WildcardType#getUpperBounds(): " + Arrays.toString(upperBounds)); for (Type upperBound : upperBounds) { print(level, "WildcardType#upperBound: " + upperBound); printType(upperBound, level + 1); } }
private static void printParameterizeType(ParameterizedType type, int level) { Type ownerType = type.getOwnerType(); print(level, "ParameterizedType#getOwnerType(): " + ownerType); printType(ownerType, level + 1); Type rawType = type.getRawType(); print(level, "ParameterizedType#getRawType(): " + rawType); printType(rawType, level + 1); Type[] types = type.getActualTypeArguments(); print(level, "ParameterizedType#getActualTypeArguments(): " + Arrays.toString(types)); for (Type type1 : types) { print(level, "ParameterizedType#actualTypeArgument: " + type1); printType(type1, level + 1); } }
private static void print(int level, String string) { System.out.printf("%" + (level * 4 - 3) + "s\u00A6- %s%n", "", string); } }
Output ¦- type: java.util.List<?> ¦- type is an instance of ParameterizedType ¦- ParameterizedType#getOwnerType(): null ¦- ParameterizedType#getRawType(): interface java.util.List ¦- type: interface java.util.List ¦- type is an instance of Class ¦- Class Name: java.util.List ¦- ParameterizedType#getActualTypeArguments(): [?] ¦- ParameterizedType#actualTypeArgument: ? ¦- type: ? ¦- type is an instance of WildcardType ¦- WildcardType#getLowerBounds(): [] ¦- WildcardType#getUpperBounds(): [class java.lang.Object] ¦- WildcardType#upperBound: class java.lang.Object ¦- type: class java.lang.Object ¦- type is an instance of Class ¦- Class Name: java.lang.Object
package com.logicbig.example.method;
import java.lang.reflect.*; import java.util.Arrays; import java.util.List; import java.util.Objects;
public class GetGenericReturnTypeExample6 { public List<Number> process() {return null;}
public static void main(String... args) throws NoSuchMethodException { Method m = GetGenericReturnTypeExample6.class.getDeclaredMethod("process"); Type type = m.getGenericReturnType(); printType(type, 1); }
private static void printType(Type type, int level) { if (type == null) { return; } print(level, "type: " + Objects.toString(type)); if (type instanceof Class) { print(level, "type is an instance of Class"); print(level, "Class Name: " + ((Class) type).getName()); } else if (type instanceof ParameterizedType) { print(level, "type is an instance of ParameterizedType"); printParameterizeType((ParameterizedType) type, level + 1); } else { throw new RuntimeException("Unknown type: " + type); } }
private static void printParameterizeType(ParameterizedType type, int level) { Type ownerType = type.getOwnerType(); print(level, "ParameterizedType#getOwnerType(): " + ownerType); printType(ownerType, level + 1); Type rawType = type.getRawType(); print(level, "ParameterizedType#getRawType(): " + rawType); printType(rawType, level + 1); Type[] types = type.getActualTypeArguments(); print(level, "ParameterizedType#getActualTypeArguments(): " + Arrays.toString(types)); for (Type type1 : types) { print(level, "ParameterizedType#actualTypeArgument: " + type1); printType(type1, level + 1); } }
private static void print(int level, String string) { System.out.printf("%" + (level * 4 - 3) + "s\u00A6- %s%n", "", string); } }
Output ¦- type: java.util.List<java.lang.Number> ¦- type is an instance of ParameterizedType ¦- ParameterizedType#getOwnerType(): null ¦- ParameterizedType#getRawType(): interface java.util.List ¦- type: interface java.util.List ¦- type is an instance of Class ¦- Class Name: java.util.List ¦- ParameterizedType#getActualTypeArguments(): [class java.lang.Number] ¦- ParameterizedType#actualTypeArgument: class java.lang.Number ¦- type: class java.lang.Number ¦- type is an instance of Class ¦- Class Name: java.lang.Number
Without any generics: package com.logicbig.example.method;
import java.lang.reflect.Method; import java.lang.reflect.Type; import java.util.Objects;
public class GetGenericReturnTypeExample7 { public Number process() {return null;}
public static void main(String... args) throws NoSuchMethodException { Method m = GetGenericReturnTypeExample7.class.getDeclaredMethod("process"); Type type = m.getGenericReturnType(); printType(type, 1); }
private static void printType(Type type, int level) { if (type == null) { return; } print(level, "type: " + Objects.toString(type)); if (type instanceof Class) { print(level, "type is an instance of Class"); print(level, "Class Name: " + ((Class) type).getName()); } else { throw new RuntimeException("Unknown type: " + type); } }
private static void print(int level, String string) { System.out.printf("%" + (level * 4 - 3) + "s\u00A6- %s%n", "", string); } }
Output ¦- type: class java.lang.Number ¦- type is an instance of Class ¦- Class Name: java.lang.Number
|
|