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

J S*_*ith 5 java generics type-erasure

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

interface I<A> {}
interface I<A, B> {}
Run Code Online (Sandbox Code Playgroud)

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

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

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

ars*_*jii 6

它与类型擦除无关,而与使用原始类型产生的模糊性无关:

I eye = null;  // which 'I' is it?
Run Code Online (Sandbox Code Playgroud)

允许使用原始类型以容纳在JDK 5.0中引入泛型之前编写的代码.