Java remplacer abstrait méthode générique
J'ai le code suivant
public abstract class Event {
public void fire(Object... args) {
//tell the event handler that if there are free resources it should call
//doEventStuff(args)
}
//this is not correct, but I basically want to be able to define a generic
//return type and be able to pass generic arguments. (T... args) would also
//be ok
public abstract <T, V> V doEventStuff(T args);
}
public class A extends Event {
//This is what I want to do
@Overide
public String doEventStuff(String str) {
if(str == "foo") {
return "bar";
} else {
return "fail";
}
}
}
somewhere() {
EventHandler eh = new EventHandler();
Event a = new A();
eh.add(a);
System.out.println(a.fire("foo")); //output is bar
}
Cependant je ne sais pas comment faire, car je ne peux pas remplacer doEventStuff
avec quelque chose de spécifique.
Personne ne sait comment faire cela?
- Comment est-T-il défini?
- Depuis le générique de paramètres n'apparaissent pas n'importe où ailleurs, la signature de la méthode est largement équivalente à
public abstract Object doEventStuff(Object args)
. C'est une méthode qui prend n'importe quoi comme argument, et renvoie à quelque chose. Êtes-vous sûr que c'est ce que vous avez prévu? Si non, vous souhaiterez probablement à définir lesT
et/ouV
paramètres sur laEvent
classe, et pas seulement pour la méthode. - Aussi, soyez conscient que
if(str == "foo") {
est probablement pas et que vous avez besoin de quelque chose commeif("foo".equals(str)) {
- Thx pour le "foo".est égal... cela aurait gâché beaucoup de choses, si c'est passé inaperçu.
Vous devez vous connecter pour publier un commentaire.
Ce n'est pas vraiment clair ce que vous êtes en train de faire, mais peut-être vous avez juste besoin de faire
Event
lui-même générique:Vous êtes le recours aux génériques, mais vous n'êtes pas fournir une liaison.
Ou plus simple avec un seul générique de liaison...