为什么Java不允许基于类型参数的重载?

时间:2013-07-11 01:35:28

标签: java generics type-erasure

我们可以在.NET中解决这个问题:

interface I<A> {}
interface I<A, B> {}

...但在Java中,相同的代码将导致编译错误。

这很有趣,因为即使类型信息在运行时消失了,人们也会期望有关类型参数数量的信息仍然存在。

如果此限制与类型擦除有关,有人可以解释原因吗?

2 个答案:

答案 0 :(得分:6)

与使用raw type产生的模糊性无关:与类型擦除无关:

I eye = null;  // which 'I' is it?

允许使用原始类型,以适应在JDK 5.0中引入泛型之前编写的代码。

答案 1 :(得分:1)

在java中,泛型类/接口具有固定数量的泛型参数。这就是定义语言的方式。

与你所谈论的最接近的可能是:

interface I<A> {}
interface J<A, B> extends I<A> {}

J的实例仍可分配给I类型的变量。