Java构造函数无法使用varargs

Cli*_*ote 3 java

我有以下枚举,其中包含许多构造函数:

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) {}
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我很明确地在定义时调用第4个构造函数HOMEPAGE.但问题是,我收到了错误:Cannot resolve constructor Route(java.lang.String, null, com.foo.UserType).

如果我从构造函数中删除varags,即它看起来像:

   Route(String baseName, String langFile, UserType availability) {}
Run Code Online (Sandbox Code Playgroud)

或者,如果我在定义时更改null HOMEPAGE,即:

   HOMEPAGE("", "", UserType.GUEST);
Run Code Online (Sandbox Code Playgroud)

然后它工作.但这对我来说没有意义.为什么不检测到我正在调用第4个构造函数?

hmj*_*mjd 10

问题是null可能是a String或a UserType.所以:

HOMEPAGE("", null, UserType.GUEST);
Run Code Online (Sandbox Code Playgroud)

将匹配第三或第四个构造函数.null将a 转换为a String将导致选择第四个构造函数:

HOMEPAGE("", (String) null, UserType.GUEST);
Run Code Online (Sandbox Code Playgroud)