java8如何从通用对象<t>动态获取字段?

时间:2019-03-17 04:22:57

标签: java-8

做某事有固定的步骤,因此我将其提取为常用方法,请参见下文

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(()->getFooList(), Foo::getProId);


commonMethod(()->getBarList(), Bar::getProId); 

但是我仍然想知道是否可以删除commonMethod中的第二个参数?

private static <T>void commonMethod(GetListAction getListAction)

但是在这种情况下,如何从列表中获取proIdList

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

1 个答案:

答案 0 :(得分:2)

摆脱splt_val['\n'_k]("test") 的一种方法是使Function<T, Integer> tObjectFunction成为接口的子类型。例如:

T

interface Action { Integer getProdId(); } Foo将实现此接口,并且由于它们已经具有Bar方法,因此应该很容易。

这将允许您将方法声明为

getProdId()