Java中带varags参数的方法重载中的编译器错误

Java中带varags参数的方法重载中的编译器错误,java,overloading,variadic-functions,Java,Overloading,Variadic Functions,我有两个类似的功能: String getMessage(String code, Object... objects); String getMessage(Locale locale, String code, Object... objects); public class MyService { @Autowired private CustomMessageSource messageSource; public String createSomeMessa

我有两个类似的功能:

String getMessage(String code, Object... objects);
String getMessage(Locale locale, String code, Object... objects);
public class MyService {
    @Autowired
    private CustomMessageSource messageSource;

    public String createSomeMessage(){
        messageSource.getMessage("online.order");
    }

}
我尝试在没有varags参数的情况下调用第一个函数:

myClass.getMessage("online.order");
我遇到以下编译器错误:

错误:java:不兼容的类型:java.lang.String无法转换 到java.util.Locale

它试图使用第二个函数,我不明白为什么

更新:代码的上下文

这是定义这两个功能的接口:

public interface MyMessageProvider {
    String getMessage(String code, Object... objects);
    String getMessage(Locale locale, String code, Object... objects);
}
这是实现该接口的实际类,并且扩展了Spring
ReloadableResourceBundleMessageSource

public class CustomMessageSource extends ReloadableResourceBundleMessageSource implements MyMessageProvider {
    public static final String BEAN_NAME = "messageSource";

    public static CustomMessageSource getInstance() {
        return (CustomMessageSource) SpringApplicationContext.getBean(BEAN_NAME);
    }

    @Override
    public String getMessage(String code, Object[] objects) {
        return getMessage(getCurrentLocale(), code, objects);
    }

    @Override
    public String getMessage(Locale locale, String code, Object... objects) {
        return getMessage(code, objects, code, locale);
    }
}
我在这样的类中调用getMessage:

String getMessage(String code, Object... objects);
String getMessage(Locale locale, String code, Object... objects);
public class MyService {
    @Autowired
    private CustomMessageSource messageSource;

    public String createSomeMessage(){
        messageSource.getMessage("online.order");
    }

}

我可以通过向接口/实现添加
stringgetmessage(stringcode)
来解决这个问题。编译错误对我来说和你们不一样。但是,我得到了编译错误

被重写方法的签名会从

public String getMessage(String code, Object... objects)

对于编译器来说,这无关紧要,它将
对象…
视为应该转换为
对象[]
的对象,并将进行转换(编译阶段完成后,没有任何
对象…
东西)

但对我们来说,这确实很重要。我们必须严格遵循方法签名。要调用该方法,必须在此处传递数组或
null

instance.getMessage("code", new Object[]{});
instance.getMessage("code", null);

天哪!我自己发现了这个问题。问题出在我重写的实现类中

String getMessage(String code, Object... objects);


它可以正常工作,没有任何问题,但是当我想在没有任何varags参数的情况下调用getMessage时,重写无法处理它。

您确定您的构建是最新的吗?如果在其他上下文中仍然出现相同的错误,请尝试执行
Project->Clean
。上面的代码不会产生所描述的错误。@MattClark,我清理了项目,但仍然得到相同的编译错误。到目前为止,我能找到的唯一解决方案是定义一个新函数
String getMessage(String code)
,并使用null作为varags调用其中的第一个函数。看起来很奇怪,第一个方法应该被调用,还有其他重载方法吗?Whelp,您必须在其他上下文中,我刚刚在IDE中尝试过这个方法,我无法重现这个问题。我为这个问题添加了更多的上下文。代码在Spring boot framework中运行。是的,我同时发现了问题:)但是编译器没有告诉我关于这个问题的任何信息/@Arashsoft,它认为
Object…
Object[]
相等,所以重写过程没有出现问题。但是这篇文章表明它们不相等。这是编译器错误:)@Arashsoft,它们不仅在语法上对我们是相等的