【发布时间】:2020-03-25 14:34:53
【问题描述】:
我有一个充满不同列表的类,我想要一种简单的方法来重新映射它们的值。 所以我尝试创建一个像这样的通用重映射方法
private List<Row> list = new ArrayList<>();
@Builder(toBuilder = true)
@Data
private class Row {
private String data;
}
public <T> void reMap(Class<T> builderClass, Function<T, T> rowMapper) {
if(builderClass.equals(Row.class)) {
list = list.stream().map(Row::toBuilder).map(rowMapper).map(Row::build).collect(Collectors.toList());
}
}
但它抱怨rowMapper 说
reason: no instance(s) of type variable(s) exist so that RowBuilder conforms to T
很难理解为什么会这样,以及是否有合适的解决方法?
【问题讨论】:
-
如果你只为一个特定的类做任何事情,为什么还需要一个泛型函数?
-
builderClass参数的作用是什么? -
基本上是因为我不想在每个列表中都使用
reMap函数来弄乱我的班级。我的示例确实缩短了,实际上我有近 20 个列表,如果避免使用 20 个几乎相同的reMap函数会非常好 -
@Sweeper 我的想法是能够在运行时将 T 绑定到实际类型。如果我没记错的话(我可能没有记错),如果 Java 编译器没有绑定到诸如类之类的东西,它会清除所有泛型类型
-
注意:
Function<T, T>可以重写为UnaryOperator<T>。
标签: java generics java-stream