1.あいまいさエラーとは何ですか?
2.あいまいさの例: 消去オーバーロード
問題のあるコード:
class MyGenClass<T, V> { T ob1; V ob2; // Tentativa de sobrecarga void set(T o) { ob1 = o; } void set(V o) { ob2 = o; } }
エラー: ジェネリック パラメーター T および V に基づいて set() メソッドをオーバーロードしようとする試みは有効であるように見えますが、あいまいさが生じます。
3.曖昧さの理由
例:
MyGenClass<String, String> obj = new MyGenClass<>();
ここでは、T と V の両方が String に置き換えられ、set() の 2 つのバージョンが同一になります。
結果:
2 番目の問題: 消去により型がオブジェクトに削減されます。
void set(Object o) { // ... }
これにより、T と V の区別がなくなり、オーバーロードが不可能になります。
4.なぜこのようなことが起こるのでしょうか?
5.解決策: 汎用オーバーロードを回避します
曖昧さを解決するには、メソッドに別の名前を使用します。
修正後の例:
class MyGenClass<T, V> { T ob1; V ob2; void setOb1(T o) { ob1 = o; } void setOb2(V o) { ob2 = o; } }
ここでは、setOb1() と setOb2() は別個のメソッドであるため、競合が解消されます。
6.結論
このようなあいまいさは、消去によってジェネリック パラメーターが単純な型 (オブジェクト) に変換されるために発生します。
間違いを避けるために、次の方法に従ってください:
以上がジェネリックスによるあいまいさエラーの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。