一、传统通过反射取得函数的参数和返回值 import java.lang.reflect.Method;
import java.lang.reflect.ParameterizedType; import java.lang.reflect.Type; import java.util.ArrayList; import java.util.Map; import java.util.List; import java.util.Set; import sun.reflect.generics.reflectiveObjects.ParameterizedTypeImpl; public class Foo { public static void main(String[] args) throws Exception { Method[] methods = Foo. class .getDeclaredMethods(); for (Method method : methods) { Class[] paramTypeList = method.getParameterTypes(); Class returnType = method.getReturnType(); System.out.println(returnType); for (Class clazz:paramTypeList) { System.out.println(clazz); } System.out.println(); } } public static String test1(String str) { return null ; } public static Integer test2(String str,Integer i) { return null ; } }
import java.lang.reflect.Method;
import java.lang.reflect.ParameterizedType; import java.lang.reflect.Type; import java.util.ArrayList; import java.util.Map; import java.util.List; import java.util.Set; import sun.reflect.generics.reflectiveObjects.ParameterizedTypeImpl; public class Foo { public static void main(String[] args) throws Exception { Method[] methods = Foo. class .getDeclaredMethods(); for (Method method : methods) { System.out.println( " returnType: " ); Type returnType = method.getGenericReturnType(); if (returnType instanceof ParameterizedType) { Type[] types = ((ParameterizedType)returnType).getActualTypeArguments(); for (Type type:types) { System.out.println(type); } } System.out.println( " paramTypeType: " ); Type[] paramTypeList = method.getGenericParameterTypes(); for (Type paramType : paramTypeList) { if (paramType instanceof ParameterizedType) { Type[] types = ((ParameterizedType)paramType).getActualTypeArguments(); for (Type type:types) { System.out.println(type); } } } } } public static List < String > test3(List < Integer > list) { return null ; } private static Map < String, Double > test4(Map < String, Object > map) { return null ; } } 三、应用环境 < config name = " Foo.DoubleBean " >
< element key = " key1 " value = " 1.1 " /> < element key = " key2 " value = " 2.2 " /> < element key = " key3 " value = " 3.3 " /> </ config > 根据用户的参数变成不同的集合类 Map<String.String> Map<String,Double> Map<String,Float>
如果你要着手开发一个框架,这样的需求会比较常见。这个时候取到setXX()函数的参数,就可以对应上边的问题了。 (#)
|
|