Je me suis efforcé pendant un certain temps d'essayer de définir une interface générique, mais je ne parviens pas à réaliser ce que je veux. Ce qui suit est un exemple simplifié du problème.Problème de définition d'une interface générique
Disons que j'ai un générique message classe
public class Message<T> {
private T content;
public void setContent(T content) {
this.content = content;
}
public T getContent() {
return content;
}
}
et je veux définir une interface pour les choses transfering:
public interface Transfer<Message<T>> {
public void send(Message message);
}
Le problème est que le compilateur n'accepte pas , et se plaint toujours de le deuxième caractère '<', peu importe quelles variations j'essaie. Comment spécifier cette interface pour qu'elle soit liée à un type générique (basé sur Message) et avoir également accès au type paramétré?
Mon plan était d'utiliser cette interface comme ce qui suit:
public class Carrier<Message<T>> implements Transfer<Message<T>> {
public void send(Message message) {
T content = message.getContent();
print(content);
}
public static void print(String s) {
System.out.println("The string equals '" + s + "'");
}
public static void print(Integer i) {
System.out.println("The integer equals " + i);
}
public static void main(String[] args) {
Carrier<Message<String>> stringCarrier = new Carrier<Message<String>>();
Message<String> stringMessage = new Message<String>("test");
stringCarrier.send(stringMessage);
Carrier<Message<Integer>> integerCarrier = new Carrier<Message<Integer>>();
Message<Integer> integerMessage = new Message<Integer>(123);
integerCarrier.send(integerMessage);
}
}
je l'ai fait quelques recherches et lire (entre autres Angelika's generics faq), mais je ne suis pas en mesure de dire si cela est impossible ou si Je le fais mal.
Mise à jour 2009-01-16: suppression de l'utilisation originale de la « chose » au lieu de « message < T> » (qui a été utilisé parce qu'avec que j'ai pu compiler sans obtenir des erreurs de syntaxe sur l'interface).
Cette question est-elle résolue ou non? On dirait que Jon Skeet l'a compris, mais vous n'avez pas marqué sa réponse comme acceptée. –