根据参数类型返回特定类型的集合

问题描述 投票:0回答:1

我正在尝试编写一个映射器,它可以接受

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; }
谢谢

java generics
1个回答
0
投票
这在Java中是不可能的。

如果你想让 Scala 工作,你可以尝试它。

© www.soinside.com 2019 - 2024. All rights reserved.