1

このgetResult()には、入力パラメーターにわずかな変化があります。1つのMapvalueを1つの文字列配列として、1つの文字列をanorとして。

しかし、私はエラーを見ています:サポートジェネリックをオーバーロードしませんか?

public class App 
{

public void getResult(Map<String, String[]> map) {

}
public void getResult(Map<String, String> map) {

}

}

このエラーが表示されます:メソッドgetResult(Map)は、タイプAppの別のメソッドと同じ消去getResult(Map)を持っています。Javaは両方を単なるマップとして扱っていると思います。このエラーも同様です。

この動作を模倣するための最良のアプローチは何ですか?

ありがとう

4

2 に答える 2

4

オーバーロードのルールの 1 つは、型パラメーターを持つメソッドは、消去後に同じシグネチャを持つことはできないということです。Java 言語仕様の §8.4.8.3を参照してください。仕様からの関連テキストは次のとおりです。

型宣言 T にメンバ メソッド m 1があり、T または T のスーパータイプで次のように宣言されたメソッド m 2が存在する場合、コンパイル時エラーになります。. . m 1または一部のメソッド m 1オーバーライドの署名 (直接的または間接的) は、m 2または一部のメソッド m 2オーバーライドの署名 (直接的または間接的) と同じ消去を行います。

于 2012-08-10T20:26:09.367 に答える
2

メソッド パラメーターはオブジェクトの型のみを尊重し、オブジェクトに存在するジェネリックは考慮しません。このため、Map パラメーターを持つ 2 つのメソッドは、ジェネリック型に関係なく同じと見なされます。

于 2012-08-10T20:26:26.637 に答える