我正在尝试编写一个映射器,它可以接受
Collection<A>
并返回 Collection<B>
。这部分很简单,但我正在尝试使返回的 Collection 与输入的类型相同。
例如,调用 aToB(Set.of(new A()))
将返回
Set<B>
。更重要的是,我希望编译器能够意识到这一点。我尝试使用泛型,但由于我无法参数化泛型,因此似乎不太可能。以下不起作用:
public <C extends Collection> C<B> aToB(C<A> coll) {}
像下面这样的东西失去了集合必须是相同类型的事实,并且编译器无论如何都不满意:
public <C extends Collection<A>, D extends Collection<B>> D aToB(C coll) {}
我知道这不是一个实际案例,我应该简单地编写多个方法,我就是这样做的,但我很好奇这是否可能。作为一个附带问题,我也对为什么以下代码也无法编译感兴趣,说我在需要 C 时提供了 List。
public <C extends Collection<String>> C aaa() {
List<String> a = List.of("AAA");
return a;
}
谢谢
如果你想让 Scala 工作,你可以尝试它。