我有以下泛型方法,它执行它接收到的列表中每个项目的getter:
public static <T, S> List<S> getValues(List<T> list, String fieldName) {
List<S> ret = new ArrayList<S>();
String methodName = "get" + fieldName.substring(0, 1).toUpperCase()
+ fieldName.substring(1, fieldName.length());
try {
if (list != null && !list.isEmpty()) {
for (T t : list) {
ret.add((S) t.getClass().getMethod(methodName).invoke(t));
}
}
} catch (IllegalArgumentException e) {
} catch (SecurityException e) {
} catch (IllegalAccessException e) {
} catch (InvocationTargetException e) {
} catch (NoSuchMethodException e) {
}
return ret;
}
如果我这样称呼它,它工作得很好:
List<Integer> ids = getValues(List<MyDTO>, "id");
request.setListIds(ids);
但是,如果我在一行中执行它,它会给我一个编译错误:
request.setListIds(getValues(List<MyDTO>, "id"));
错误说:
MyDTO 类型中的方法 setListIds(List-Integer-) 不适用于参数 (List-Object-)
因此,当我尝试直接设置列表时,它将泛型转换为 Object 而不是 Integer。这是为什么?