Community
Participate
Working Groups
I20050118-1015 The compiler allows to override a method with an array parameter by a method with a vararg parameter. In contrast, javac says: - warning: runall(java.lang.Runnable...) in p.Sub cannot override runall(java.lang.Runnable[]) in p.Top; overridden method has no '...' - warning: runall(java.lang.Runnable[]) in p.Sub2 cannot override runall(java.lang.Runnable...) in p.Sub; overriding method is missing '...' However, both compilers create classfiles in which the methods do override. ------------------------------------------------ package p; public class A { public static void main(String[] args) { Runnable r1 = null, r2 = null; System.out.println(new Top().runall(new Runnable[] { r1, r2 })); System.out.println(new Sub().runall(new Runnable[] { r1, r2 })); System.out.println(new Sub().runall(r1, r2)); System.out.println(new Sub2().runall(new Runnable[] { r1, r2 })); } } class Top { public String runall(Runnable[] runnables) { return "Top"; } } class Sub extends Top { public String runall(Runnable... runnables) { return "Sub, " + super.runall(runnables); } } class Sub2 extends Sub { public String runall(Runnable[] runnables) { return "Sub2, " + super.runall(runnables); } }
See VarargsTest test011
Verified in I20050215-2300