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–

java-img




My Personal Notes arrow_drop_up

Check out this Author's contributed articles.

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.