J'ai le code suivant et cela ne fonctionne pas: l'erreur both methods have same erasure
apparaît.
public class Foo<V> {
public static void main(String[] args) {
}
public void Bar(V value) {
}
public void Bar(Object value) {
}
}
J'ai aussi ce 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 {
}
Et ça marche. Dans le premier cas, V
est un enfant de Object
, tout comme dans le second cas B
est un enfant de A
. Alors pourquoi le premier cas entraîne une erreur, alors que le second se compile avec succès?
EDIT : Que dois-je faire pour obtenir une surcharge de méthode, sans déclencher d'erreur?
Que dois-je faire pour obtenir une surcharge de méthode, sans déclencher d'erreur?
Simple: n'essayez pas de surcharger la méthode avec des paramètres avec le même effacement.
Quelques options:
Liez la variable de type, comme suggéré par @ Kayaman :
<V extends SomethingOtherThanObject>
V
n'est pas "un enfant de Object
". V
est un type générique illimité qui s'efface en Object
, ce qui entraîne l'erreur. Si le type générique était limité, tel que <V extends Comparable<V>>
, il serait effacé en Comparable
et vous n'obtiendriez pas l'erreur.