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