[英]Why does Java think my constructor call is ambiguous?
我在Java應用程序中有以下代碼:
UserMessage um = new UserMessage("a string",
false,
"another String",
"one last string");
Eclipse告訴我這行代碼存在錯誤:
The constructor UserMessage(String, Object[]) is ambiguous
UserMessage的所有構造函數的簽名為:
1. public UserMessage(String key)
2. public UserMessage(String key, boolean escapeHTML, Object... args)
3. public UserMessage(String key, Object... args)
4. public UserMessage(ErrorCode code)
5. public UserMessage(ErrorCode code, Object... args)
在我看來,我正在調用的構造函數似乎應該指向上面的#2。 該錯誤似乎向我暗示它認為它可能指向第三個構造函數。
為什么這個電話含糊不清? 我唯一能想到的是如果由於某種原因將false
強制轉換為Boolean
對象,但是很明顯,這不是我的代碼所要做的-因此,這必須是Java編譯器自行執行的操作。
將布爾值自動裝箱成布爾值似乎是一個問題,因此編譯器無法確定是否在varargs Object數組(#2)中將構造函數傳遞給String,布爾值和兩個String,或者傳遞給String和包含布爾值,字符串和另一個字符串(#3)的varargs對象數組。
ETA:如果您想區分構造函數,則可以嘗試將Object ... varargs更改為String ... varargs,如果可以在實現中實現的話。 這應該防止將布爾值自動裝箱為布爾值,從而在構造函數#2和#3之間產生歧義。
ETA2:剛剛檢查了我在Eclipse中的建議,並將構造函數中的Object ... varargs更改為String ... varargs消除了歧義錯誤,因此問題似乎是將布爾值自動裝箱成布爾值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.