gpt4 book ai didi

java - 如何根据参数类型选择重载方法?

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:19:51 25 4
gpt4 key购买 nike

我正在尝试根据参数类型重载我的方法:

FieldError延伸ObjectError .

private String getMessage(final FieldError fieldError) {
return String.format("%s %s", fieldError.getField(), fieldError.getDefaultMessage());
}

private String getMessage(final ObjectError objectError) {
return objectError.getDefaultMessage();
}

现在,如果我有一个 List<ObjectError>并为 List 的元素调用上述方法,无论哪种类型( ObjectErrorFieldError ) List 上的元素是,
getMessage(final ObjectError objectError) 将始终被调用。

enter image description here

List<ObjectError> errors;
getMessage(errors.get(0));

为什么会这样?如果它就是这样工作的,有没有机会不使用 if的和instanceof的?

最佳答案

方法重载解析是在编译时执行的,此时只有编译时类型是已知的。因此,传递给方法调用的参数的编译时类型决定了选择哪个重载方法。

由于您要传递 List<ObjectError> 的元素到方法调用,String getMessage(final ObjectError objectError)始终被选中,并且实例的运行时类型存储在 List 中没有区别。

解决问题的一种方法是移动 getMessage() ObjectError 的方法类,并在 FieldError 中覆盖它子类。

代替

getMessage(errors.get(0))

你会打电话

errors.get(0).getMessage()

这会起作用,因为方法覆盖在运行时解决。

关于java - 如何根据参数类型选择重载方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53744250/

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