Java Generic Re- / Combination

时间:2015-12-10 00:21:26

标签: java generics

给出这样的通用函数:

   <C0 extends Collection<A>, C1 extends Collection<B>, A, B> void foo(C0 a, C1 b);

问题1:如何强制执行C0和C1 完全相同的集合类型?

问题2:下面显示的代码语法错误,但有没有办法实现这个目标?

我希望能够写出这样的东西。它更短,更容易理解。

<C extends Collection, A, B> void foo(C<A> a, C<B> b);

1 个答案:

答案 0 :(得分:0)

当然,这是一次彻底的黑客攻击,但是......

您可以使用重载来提供List版本,Set版本等等。显然,您可以使它们完全相同,通过提供具体实现的极端类型,而不是它们的接口类型。

有时库使用生成代码的预编译步骤来执行类似的操作。

或者,(另一个hack),您可以创建一个包含两列的类,并使用单个泛型参数化 类型。