簡體   English   中英

為什么Java不允許基於類型參數的重載?

[英]Why doesn't Java allow overloads based on type parameters?

我們可以在.NET中解決這個問題:

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

...但在Java中,相同的代碼將導致編譯錯誤。

這很有趣,因為即使類型信息在運行時消失,人們也會期望有關類型參數數量的信息仍然存在。

如果此限制與類型擦除有關,有人可以解釋原因嗎?

它與類型擦除無關,而與使用原始類型產生的模糊性無關:

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

允許使用原始類型以容納在JDK 5.0中引入泛型之前編寫的代碼。

在java中,泛型類/接口具有固定數量的泛型參數。 這就是語言定義的方式。

與你所談論的最接近的可能是:

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

J的實例仍可分配給I類型的變量。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM