[英]Java constructor fails to work with varargs
我有以下枚舉,其中包含許多構造函數:
public enum Route
{
HOMEPAGE("", null, UserType.GUEST);
Route(String baseName, String langFile, Entity entity) {}
Route(String langFile, Entity entity) {}
Route(String langFile, UserType... availability) {}
Route(String baseName, String langFile, UserType... availability) {}
}
在這種情況下,當我定義HOMEPAGE
時,我很清楚地調用了第4個構造函數。 但問題是,我收到錯誤: Cannot resolve constructor Route(java.lang.String, null, com.foo.UserType)
。
如果我從構造函數中刪除varags,即它看起來像:
Route(String baseName, String langFile, UserType availability) {}
或者,如果我在定義HOMEPAGE
時更改null,即:
HOMEPAGE("", "", UserType.GUEST);
然后它工作。 但這對我來說沒有意義。 為什么不檢測到我正在調用第4個構造函數?
問題是null
可以是String
或UserType
。 所以:
HOMEPAGE("", null, UserType.GUEST);
將匹配第三或第四個構造函數。 將null
轉換為String
將導致選擇第四個構造函數:
HOMEPAGE("", (String) null, UserType.GUEST);
它是不正確的,它不知道要選擇哪個構造函數,你的調用是:
Route(String, null, UserType)
這肯定不會引用前兩個構造函數。
但是它可以引用Route(String, UserType)
,因為null
可以是UserType
。
它也可以引用Route(String, String, UserType)
,因為null
可以是String
類型。
有你的沖突。
因為null可以是String或UserType:
Route(java.lang.String, null, com.foo.UserType)
與兩種方法匹配:
Route(String langFile, UserType... availability) {}
Route(String baseName, String langFile, UserType... availability) {}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.