overloading - Java method overload - ambiguity -
while doing runs test code in thread found out strange thing, if consider following program
import java.util.arraylist; import java.util.list; public class overloadtest { public string test1(list l){ return "abc"; } public int test1(list<integer> l){ return 1; } public static void main(string [] args) { list l = new arraylist(); system.out.println(new overloadtest().test1(l)); } }
i expecting java compiler show ambiguity error due byte-code erasure property, didn't. when tried run code, expecting test1(list)
called , output "abc"
surprise called test1(list<integer>)
(output 1
)
i tried below
list l = new arraylist(); l.add("a"); system.out.println(new overloadtest().test1(l));
but still found java calling test1(list<integer> param)
method , when inspected param
had string
"a" ( how did java cast list<string>
list<integer>
?)
this fixed bug. https://bugs.eclipse.org/bugs/show_bug.cgi?id=354229
it looks bug existed in javac5, javac6 , ecj eclipse 3.7, fixed in eclipse 3.8 , later.
Comments
Post a Comment