Method Class | getGenericReturnType() Method in Java

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.

Exapmles:

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.

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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 class
class 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");
    }
}

chevron_right


Output:

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.

filter_none

edit
close

play_arrow

link
brightness_4
code

// Program to show how 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;
  
            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 class
class 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;
    }
}

chevron_right


Output:

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–



My Personal Notes arrow_drop_up

I am a Developer I love to code and bring my ideas alive

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.