getting type of element in a List in which List is

2020-04-11 23:53发布

I got every methods in my package using reflections and then based on the return type of every method, I want to do some operations. But unfortunately I had a problem with collections. when I find a method in which return a collection like a List, I can't find a way to get to know about the type of List's element. I used the code below to get the return type of my methods.

if (method.getReturnType().equals(List.class)){
    statement;
}

The above code does work well and gets every method which return a List but it is just return java.util.List as a return type and I can't find a way to get to know about the type of element in that List. For instance, if I have a method like this:

public List<CmsCustomerModel> getCustomerModel(){
    statement;
}

I don't know how can I get CmsCustomerModel class as a type of element for return List. I would be wonder if anyone help me find this. Please guide me.

1条回答
狗以群分
2楼-- · 2020-04-12 00:50

You can use getGenericReturnType which returns a Type rather than a Class, and allows you to get at all the type arguments etc. Short but complete example:

import java.lang.reflect.*;
import java.util.*;

public class Test {

    public static void main(String [] args) {
        for (Method method : Test.class.getMethods()) {
            System.out.println(method.getName());
            Type type = method.getGenericReturnType();
            System.out.println("Return type: " + type.getTypeName());
            if (type instanceof ParameterizedType)
            {
                ParameterizedType pt = (ParameterizedType) type;
                System.out.println("Parameterized: " + pt.getRawType());
                for (Type arg : pt.getActualTypeArguments())
                {
                    System.out.println("  " + arg);
                }
            }
        }
    }

    public static List<Integer> getNumbers() {
        return null;
    }

    public static List<String> getStrings() {
        return null;
    }
}

Output includes:

getStrings
Return type: java.util.List<java.lang.String>
Parameterized: interface java.util.List
  class java.lang.String
getNumbers
Return type: java.util.List<java.lang.Integer>
Parameterized: interface java.util.List
  class java.lang.Integer
查看更多
登录 后发表回答