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() 相同。
結果:
第二個問題:擦除將類型減少為物件。
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中文網其他相關文章!