我不知道要使以下重载功能正常工作会缺少什么?
例如
List<?> list = ...;
for (Object element : list)
Fun(element);
public void Fun(Integer element) { ... }
public void Fun(String element) { ... }
public void Fun(MyClass element) { ... }
Java使用双调度-编译器根据参数类型在重载方法中进行选择,然后,在运行时,JVM根据的运行时类型在方法的实现(替代)中进行选择this
。
您正在提供多个重载,但是Java不会自动在它们之间切换。它寻找可以接受的重载,但(Object element)
找不到任何重载,因此编译器拒绝了您的程序。
解决此问题的一种方法是拥有运行时分派方法:
public void Fun(Object element) {
if (element instanceof Integer) { Fun((Integer) element); }
...
}
之所以可行,是因为其静态类型非常笼统,并且Fun
使用类型更具体的参数类型进行调用,因此将其分配给其他重载。
经常使用instanceof
经常被认为是反模式。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句