In this post, I am going to explain how to get the generic argument of the method return type.
Example
public static List<User> users()
For example, in the above example, I am expecting ‘User’ as my output.
How to get the generic argument of the method return type?
Step 1: Get the Method instance.
Method method = UserUtil.class.getMethod("users");
Step 2: Get the method generic return type.
Type genericReturnType = method.getGenericReturnType();
'getGenericReturnType' method return a Type object that represents the formal return type of the method represented by this Method object. If the return type is a parameterized type, the Type object returned must accurately reflect the actual type arguments used in the source code.
Let’s check whether the returned type is ParameterizedType or not to get the generic arguments of the method return types.
if (genericReturnType instanceof ParameterizedType) {
ParameterizedType type = (ParameterizedType) genericReturnType;
for (Type t : type.getActualTypeArguments()) {
System.out.println("Type parameter: " + t);
}
} else {
System.out.println("Not a generic type");
}
Find the below working application.
User.java
package com.sample.app.dto;
public class User {
}
MethodReturnTypeDemo.java
package com.sample.app;
import java.lang.reflect.Method;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.Collections;
import java.util.List;
import com.sample.app.dto.User;
public class MthodReturnTypeDemo {
private static class UserUtil {
public static List<User> users() {
return Collections.EMPTY_LIST;
}
}
public static void main(String[] args) throws NoSuchMethodException, SecurityException {
Method method = UserUtil.class.getMethod("users");
Class<?> returnType = method.getReturnType();
Type genericReturnType = method.getGenericReturnType();
System.out.println("returnType : " + returnType);
System.out.println("genericReturnType : " + genericReturnType);
if (genericReturnType instanceof ParameterizedType) {
ParameterizedType type = (ParameterizedType) genericReturnType;
for (Type t : type.getActualTypeArguments()) {
System.out.println("Type parameter: " + t);
}
} else {
System.out.println("Not a generic type");
}
}
}
Output
returnType : interface java.util.List genericReturnType : java.util.List<com.sample.app.dto.User> Type parameter: class com.sample.app.dto.User
Previous Next Home
No comments:
Post a Comment