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