Java 8 java8如何从通用对象动态获取字段<;T>;?

Java 8 java8如何从通用对象动态获取字段<;T>;?,java-8,Java 8,做某事有固定的步骤,所以我将其提取为一种常用方法,见下文 private static <T>void commonMethod(GetListAction getListAction, Function<T, Integer> tObjectFunction) { List<T> list = getListAction.action(); List<Integer> proIdList = list.stream().map(t

做某事有固定的步骤,所以我将其提取为一种常用方法,见下文

private static <T>void commonMethod(GetListAction getListAction, Function<T, Integer> tObjectFunction) {
    List<T> list = getListAction.action();
    List<Integer> proIdList = list.stream().map(tObjectFunction).collect(Collectors.toList());
    List<ProEntity> proEntityList = getProEntityListByProIdList(proIdList);
    // do something with proEntityList
    // ...

}
interface GetListAction<T> {
    List<T> action();
}
但是我仍然想知道是否可以删除
commonMethod
中的第二个参数

private static <T>void commonMethod(GetListAction getListAction)
私有静态void commonMethod(GetListAction GetListAction)
但在这种情况下,如何从列表中获取proIdList

List<Integer> proIdList = list.stream().map(???).collect(Collectors.toList());
List proIdList=List.stream().map(?).collect(Collectors.toList());

摆脱
函数tObjectFunction
的一种方法是将
T
作为接口的子类型。例如:

interface Action {
    Integer getProdId();
}
Foo
Bar
将实现这个接口,因为它们已经有了
getProdId()
方法,所以应该很容易实现

这将允许您将方法声明为

private static <T extends Action> void commonMethod(GetListAction<T> getListAction) {
    List<T> list = getListAction.action();
    List<Integer> proIdList = list.stream()
                 .map(Action::getProdId)
                 .collect(Collectors.toList());
    ...
}
私有静态void commonMethod(GetListAction GetListAction){
List=getListAction.action();
List proIdList=List.stream()
.map(操作::getProdId)
.collect(Collectors.toList());
...
}
我认为
List action()
不应该是泛型的,因为它总是一样的。
private static <T extends Action> void commonMethod(GetListAction<T> getListAction) {
    List<T> list = getListAction.action();
    List<Integer> proIdList = list.stream()
                 .map(Action::getProdId)
                 .collect(Collectors.toList());
    ...
}