繁体   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