Reputation: 5176
I have the following code and it doesn't work: the error both methods have same erasure
appears.
public class Foo<V> {
public static void main(String[] args) {
}
public void Bar(V value) {
}
public void Bar(Object value) {
}
}
Also I have this code:
public class Foo<V> {
public static void main(String[] args) {
}
public void Bar(B value) {
}
public void Bar(A value) {
}
}
class A {
}
class B extends A {
}
And this works. In the first case V
is a child of Object
, just like in the second case B
is a child of A
. Then why the first case results in error, while the second compiles successfully?
EDIT: What should I do to achieve method overloading, without raising an error?
Upvotes: 29
Views: 68443
Reputation: 73578
V
isn't "a child of Object
". V
is an unbounded generic type that erases to Object
, resulting in the error. If the generic type were bounded, such as <V extends Comparable<V>>
, it would erase to Comparable
and you wouldn't get the error.
Upvotes: 8
Reputation: 140534
What should I do to achieve method overloading, without raising an error?
Simple: don't try to overload the method with parameters with the same erasure.
A few options:
Bound the type variable, as suggested by @Kayaman:
<V extends SomethingOtherThanObject>
Upvotes: 36