Tag: method overloading

在没有Double Dispatch / Visitor模式的情况下解决Java的静态方法调度问题

我正在使用提供这些方法的类Foo : String overloadedMethod(Object) String overloadedMethod(Goo) 由于Java静态调度非接收器参数,我不能只传递我的value (它是一个Object ,但可能有动态类型Goo )并依赖JVM动态选择“正确”方法。 这是我目前(丑陋)的解决方法: Object value = …; Foo foo = new Foo(); if (value instanceof Goo) { Goo gooValue = (Goo) value; return foo.overloadedMethod(gooValue); // -> overloadedMethod(Goo) } else { return foo.overloadedMethod(value); // -> overloadedMethod(Object) } 有没有更好的方法来做到这一点而不修改Foo的代码 (包含重载方法的类)?

Java静态导入

通过实验,我发现即使在静态上下文中,Java非静态方法也会覆盖范围内所有相同的命名方法。 即使不允许参数重载。 喜欢 import java.util.Arrays; import static java.util.Arrays.toString; public class A { public static void bar(Object… args) { Arrays.toString(args); toString(args); //toString() in java.lang.Object cannot be applied to (java.lang.Object[]) } } 我在规范中找不到任何相关内容。 这是一个错误吗? 如果不是,有没有理由实施这样的语言? UPD:Java 6不编译此示例。 问题是 – 为什么?

如何使用Mockitovalidation重载方法的调用次数?

我如何检查bar(Alpha, Baz)使用Mockito调用bar(Xray, Baz) – 在没有实际调用后者的情况下,给定我的MCVE类Foo : public class Foo { public String bar(Xray xray, Baz baz) { return “Xray”; } public String bar(Zulu zulu, Baz baz) { return “Zulu”; } public String bar(Alpha alpha, Baz baz) { if(alpha.get() instanceof Xray) { return bar((Xray)alpha.get(), baz); } else if(alpha.get() instanceof Zulu) { return bar((Zulu)alpha.get(), baz); } else […]