Following code gives compilation error with error "Duplicate Method"
static int test(int i){
return 1;
}
static String test(int i){
return "abc";
}
This is expected as both the overloaded method have same signature and differ only in return type.
But the following code compiles fine with a warning:
static int test1(List<Integer> l){
return 1;
}
static String test1(List<String> l){
return "abc";
}
As, we know the Java Generics works on Erasure, which mean in byte-code, both these method have exactly the same signature and differs with return type.
Furthur, to my surprise the following code again gives compilation error:
static int test1(List<Integer> l){
return 1;
}
static String test1(List l){
return "abc";
}
How is the second code working fine without giving any compilation error, though there is duplicate method?
List
of String
and List
of Integer
are not directly conversible, so the methods are different. No error.List
of Integer
can also be used as a plain List
of anything, so Java can't determine which one to use if supplied a List
of Integer
-> duplicate method error.Resolving overloaded methods is done at compile-time, rather than runtime, so the Java compiler would know the difference between the two in your second example. In your third example, the problem is that a List<Integer>
is also a List
, so it wouldn't know which one to use if you passed in a List<Integer>
.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With