gpt4 book ai didi

java - Java 中使用 varargs 参数重载方法时的编译器错误

转载 作者:行者123 更新时间:2023-11-29 04:37:34 25 4
gpt4 key购买 nike

我有两个这样的函数:

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

然后我尝试调用第一个不带 varags 参数的函数:

myClass.getMessage("online.order");

我得到这个编译器错误:

Error: java: incompatible types: java.lang.String cannot be converted to java.util.Locale

它尝试使用第二个功能,我不明白为什么?

更新:代码上下文

这是定义这两个函数的接口(interface):

public interface MyMessageProvider {
String getMessage(String code, Object... objects);
String getMessage(Locale locale, String code, Object... objects);
}

这是实现该接口(interface)并扩展 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:

public class MyService {
@Autowired
private CustomMessageSource messageSource;

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

}

我可以通过在接口(interface)/实现中添加 String getMessage(String code) 来解决这个问题。编译错误对我来说和你们一样没有意义。但是,我遇到了编译错误!

最佳答案

重写方法的签名稍微改变了一个父方法签名

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

public String getMessage(String code, Object[] objects)

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

而对我们来说,这确实很重要。我们必须完全遵循方法签名。要调用该方法,您必须在那里传递一个数组或 null:

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

关于java - Java 中使用 varargs 参数重载方法时的编译器错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40683626/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com