Quelqu'un peut-il m'expliquer pourquoi le code suivant ne fonctionne pas? Je reçois l'erreur suivante: P> public class Test {
interface Strategy<T> {
void execute(T t);
}
public static class DefaultStrategy<T> implements Strategy<T> {
@Override
public void execute(T t) {}
}
public static class Client<T> {
private Strategy<T> a;
public void setStrategy(Strategy<T> a) {
this.a = a;
}
private void run(T t) {
a.execute(t);
}
}
public static void main(String[] args) {
Client<String> client = new Client<String>();
client.setStrategy(new DefaultStrategy<String>());
client.run("hello world");
}
}
3 Réponses :
qui ne fonctionne pas car votre Class code> Client CODE> est écrit pour aucune stratégie spécifique code> ( stratégie > code>) mais dans le ) Exécuter () Code> Méthode, vous passez une chaîne code> (code> (qui n'est correct que pour stratégie un code> SESTStrategy () code> paramètre 's paramètre sur le type stratégie
La réponse est simple: la carte générique non liée ne peut pas être utilisée. Cela signifie simplement «un objet connu».
Cela ne donne rien d'informatique au compilateur. "?" Les moyens de tout type, il est donc trop générique pour dire quoi que ce soit. p>
regarder ici: http://java.sun.com/docs/books/tatudial/extra/generics/wildcards.html p>
Comme indiqué:
Collection<?> c = new ArrayList<String>(); c.add(new Object()); // Compile time error
C'est parce que ce n'est pas une opération de type sécurisée. "?" est une carte générique qui signifie que je ne connais pas le type. Cela ne signifie pas "n'importe quel type". Lisez ceci ... http://java.sun.com/j2se /1.5/pdf/generics-Tutorial.pdf P>