Java泛型中的标记符含义:
E - Element (在集合中使用,因为集合中存放的是元素)
T - Type(Java 类)
K - Key(键)
V - Value(值)
N - Number(数值类型)
? - 表示不确定的java类型
S、U、V - 2nd、3rd、4th types
Class在实例化的时候,T要替换成具体类
Class
package com.model.test;
import com.hlin.sensitive.test.Box;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;
class Container {
public static void main(String[] args) {
Box box = new Box();
box.setWidth(200);
box.setHeight(100);
Box box1 = new Box();
box1.setWidth(400);
box1.setHeight(300);
String key = "width";
List sourceList = new ArrayList();
sourceList.add(box);
sourceList.add(box1);
List result = trans(sourceList, key);
System.out.println(result);
}
public static <E, T> List<E> trans(List<T> sourceList, String key) {
List<E> resultList = new ArrayList<E>();
if (sourceList.isEmpty() || sourceList.size() == 0) {
return resultList;
}
String methodName = "get" + key.substring(0, 1).toUpperCase() + key.substring(1);
try {
Method method = sourceList.get(0).getClass().getMethod(methodName, new Class<?>[] {});
for (T eleObj : sourceList) {
try {
resultList.add((E) method.invoke(eleObj, new Class<?>[]{}));
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
} catch (NoSuchMethodException e) {
e.printStackTrace();
}
return resultList;
}
}