我们可以逃脱这个在.NET:为什么Java不允许基于类型参数的重载?
interface I<A> {}
interface I<A, B> {}
...但在Java中,相同的代码会导致编译错误。
这很有趣,因为即使类型信息在运行时消失了,人们仍然期望有关类型参数数量的信息仍然存在。
如果此限制与类型擦除有关,有人可以解释原因吗?
我们可以逃脱这个在.NET:为什么Java不允许基于类型参数的重载?
interface I<A> {}
interface I<A, B> {}
...但在Java中,相同的代码会导致编译错误。
这很有趣,因为即使类型信息在运行时消失了,人们仍然期望有关类型参数数量的信息仍然存在。
如果此限制与类型擦除有关,有人可以解释原因吗?
在java中,泛型类/接口具有固定数量的泛型参数。这只是语言的定义方式。
最接近的事是什么,你所谈论的可能是:
interface I<A> {}
interface J<A, B> extends I<A> {}
的J
一个实例仍然分配给I
类型的变量。
限制是你不能多次定义一个接口,你不能以这种方式重载它。在运行时,type-erasure将确保'I'实际上是不允许的相同类型,或者从技术上说它不会做你想要的。 –