The getGenericReturnType() method of java.lang.reflect.Method class returns a Type object that represent the return type, declared in method at time of coding. Hence, getGenericReturnType() method returns the return type of method object.
If a formal return type is a parameterized type, the Type object returned for it must accurately reflect the actual type parameters used in the source code. For example, for method public T getValue(){}, if the type T is substituted with a parameterized type (i.e., List), then getGenericReturnType() will return “java.util.List<java.lang.String>” as return type.
Syntax:
public Type getGenericReturnType()
Return Value: It returns a Type object that represent the formal return type of the method object.
Exception: This method throws following exceptions:
- GenericSignatureFormatError – if the generic method signature is not same as the format specified in The JVM Specification.
- TypeNotPresentException – if return type refers to a non-existent type declaration.
- MalformedParameterizedTypeException – if the underlying return type refers to a parameterized type that cannot be instantiated for any reason.
Examples:
Code:
public class demo{
public T getValue(){}
}
Explanation:
In the above method when we going to apply getGenericReturnType() method
it is going to return T as a generic return type.
Code:
public class demo{
public List getValue(){}
}
Explanation:
In the above method when we going to apply getGenericReturnType() method
it is going to return java.util.List<java.lang.String> as a generic return type
Below programs illustrates getGenericReturnType() method of Method class
Program 1: Print Return type of Method Object by applying getGenericReturnType() on a method.
Java
// Program to apply getGenericReturnType() method// of Method Class.import java.lang.reflect.Method;import java.lang.reflect.Type;public class GFG { // Main method public static void main(String[] args) { try { // create class object Class classobj = demoForReturnParam.class; // get Method Object Method[] methods = classobj.getMethods(); // iterate through methods for (Method method : methods) { // taking only method defined in the demo class if (method.getName().equals("setValue") || method.getName().equals("getValue") || method.getName().equals("setManyValues")) { // apply getGenericReturnType() method Type returnParam = method.getGenericReturnType(); // print return Types of method Object System.out.println("\nMethod Name : " + method.getName()); System.out.println("Return Type Details: " + returnParam); } } } catch (Exception e) { e.printStackTrace(); } }}// a simple classclass demoForReturnParam { // method returning int value public int setValue() { System.out.println("setValue"); return 24; } // method returning string value public String getValue() { System.out.println("getValue"); return "getValue"; } // method returning nothing public void setManyValues(int value1, String value3) { System.out.println("setManyValues"); }} |
Method Name : setManyValues Return Type Details: void Method Name : getValue Return Type Details: class java.lang.String Method Name : setValue Return Type Details: int
Program 2: Giving a Return parameter type as input to check whether method object have same return type or not.
Java
// Program to show how to apply// getGenericReturnType() method of Method Classimport java.lang.reflect.Method;import java.lang.reflect.Type;public class GFG { // Main method public static void main(String[] args) { try { // create class object Class classobj = DemoForReturnParam.class; Method[] methods = classobj.getMethods(); // check whether setManyValues() method // contains string parameter or not for (Method method : methods) { if (method.getName().equals("setValue")) { boolean flag = containsReturnParameter(method, (Type)java.lang.String.class); System.out.println("setValue()" + " contains int return type: " + flag); } } // check whether setManyValues() method // contains int parameter or not for (Method method : methods) { if (method.getName().equals("setManyValues")) { boolean flag = containsReturnParameter(method, (Type) int.class); System.out.println("setManyValues()" + " contains int return type: " + flag); } } } catch (Exception e) { e.printStackTrace(); } } // check whether method object // have same return type or not private static boolean containsReturnParameter(Method method, Type parameterName) { // get return type using getGenericReturnType() Type returnParameter = method.getGenericReturnType(); // check contains return parameter or not if (returnParameter == parameterName) { return true; } return false; }}// a simple classclass DemoForReturnParam { // method returning int value public void setValue() { System.out.println("setValue"); } // method returning nothing public int setManyValues(int value1, String value3) { System.out.println("setManyValues"); return 21; }} |
setValue() contains int return type: false setManyValues() contains int return type: true
Reference:
https://docs.oracle.com/javase/8/docs/api/java/lang/reflect/Method.html#getGenericReturnType–
