簡體   English   中英

Java構造函數無法使用varargs

[英]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可以是StringUserType 所以:

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.

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