7
votes

Erreur générique: Non applicable pour les arguments

Quelqu'un peut-il m'expliquer pourquoi le code suivant ne fonctionne pas? XXX PRE>

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");
 }
}


0 commentaires

3 Réponses :


0
votes

qui ne fonctionne pas car votre Class Client est écrit pour aucune stratégie spécifique ( stratégie ) mais dans le ) Exécuter () Méthode, vous passez une chaîne (code> (qui n'est correct que pour stratégie !). Cela ne fonctionnerait que si vous changez de type un SESTStrategy () paramètre 's paramètre sur le type stratégie ! < / p>


0 commentaires

12
votes

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


0 commentaires

0
votes

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


0 commentaires