【发布时间】:2017-07-17 11:03:28
【问题描述】:
我有以下代码,它是我偶然发现的东西的简化版本:
public class Transforming
{
static interface MyInterface<T>
{
void consume(T... toConsume);
}
static abstract class Mapper<T> implements MyInterface<String> {
MyInterface<T> delegate;
public Mapper(MyInterface<T> delegateTo)
{
delegate = delegateTo;
}
public void consume(String... transformFrom)
{
T[] array = (T[]) Arrays.stream(transformFrom)
.map(this::transform)
.toArray(); // can't toArray(T[]::new) here!
delegate.consume(array);
}
protected abstract T transform(String toTransform);
}
}
关于如何将流转换为数组的搜索显然不足,因为此时我没有结果类型的数组,而且 Java 不允许我创建泛型类型的数组...
我确实理解这个问题,但是关于如何清理代码的任何意见? AFAICT,我的选择是
- 将界面从可变参数更改为列表
- 我在代码示例中使用的演员表
- 将 IntFunction 添加到 Mapper 创建中
我缺少什么吗? 您的偏好是什么?
【问题讨论】:
-
你的
Mapper.consume方法没有实现接口,因为它在参数类型中有String而不是T。 -
@talex你当然是对的,我更正了OP以实现
MyInterface<String>。
标签: java arrays generics java-stream