簡體   English   中英

Java為什么認為我的構造函數調用不明確?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM