5

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

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

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

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

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

4

2 回答 2

6

它与类型擦除无关,与使用原始类型会产生的歧义无关:

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

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

于 2013-07-11T01:36:41.577 回答
1

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

与您所说的最接近的可能是:

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

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

于 2013-07-11T01:50:39.003 回答