5

.NET ではこれを回避できます。

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

...しかし、Java では、同じコードはコンパイル エラーになります。

実行時に型情報がなくなったとしても、型パラメーターの数に関する情報がまだそこにあると予想されることを考えると、これは興味深いことです。

この制限が型消去に関連している場合、誰かが理由を説明できますか?

4

2 に答える 2

6

生の typeを使用することから生じるあいまいさほど、型の消去には関係ありません。

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 に答える