Tag: 重载

在Java 7中使用方法重载时,为什么autoboxing不会覆盖varargs?

我们的Java项目中有一个类LogManager,如下所示: public class LogManager { public void log(Level logLevel, Object… args) { // do something } public void log(Level logLevel, int value, Object… args) { // do something else } } 在Debian下使用OpenJDK 6编译项目时,每个工作都很好。 使用OpenJDK 7时 ,构建(使用ant完成)会产生以下错误,并且构建失败: [javac] /…/LogManager.java:123: error: reference to log is ambiguous, both method log(Level,Object…) in LogManager and method log(Level,int,Object…) in LogManager match […]

Java重载规则

我最近遇到了两个重载问题,我找不到答案,也没有java环境来运行一些测试代码。 我希望有人可以通过汇编java编译器遵循的所有规则列表进行重载或者交替指向已存在的列表来帮助我。 首先,当两个方法只有最终的varargs参数不同时,在什么情况下每个方法都会被调用,你可以在没有任何args的情况下调用varargs方法吗? private void f(int a) { /* … */ } private void f(int a, int… b) { /* … */ } f(12); // calls the former? I would expect it to f(12, (int[])null); // calls latter, but passes null for b? // Can I force the compiler to call the second method in […]

Java方法重载+双重调度

任何人都可以详细解释在我的测试代码段中使用Child实例时调用重载方法print(Parent parent)的原因吗? 这里涉及Java中的任何虚拟方法或方法重载/解析的特征? 有没有直接引用Java Lang Spec? 哪个术语描述了这种行为? 非常感谢。 public class InheritancePlay { public static class Parent { public void doJob(Worker worker) { System.out.println(“this is ” + this.getClass().getName()); worker.print(this); } } public static class Child extends Parent { } public static class Worker { public void print(Parent parent) { System.out.println(“Why this method resolution happens?”); } public […]