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());
...
}