2010-03-11 7 views
0

pouvez-vous me dire comment fonctionne cette ligne .... mon OperatorFactory.get ("add") ne fait rien. Je ne reçois pas quoi que ce soit impriméinterfaces java ... questions rapides

ArithmeticOperator add = OperatorFactory.get ("add"); 

quand je donne les résultats suivants:

interface ArithmeticOperator { 

    // Returns the result of applying the operator to operands a and b. 
    double operate (double a, double b); 

    // Return a String that is the name of this operator. 
    String printName(); 
} 


public class OperatorFactory implements ArithmeticOperator { 



    public OperatorFactory(){ 

    } 

    public static ArithmeticOperator get(String name){ 
     if(name.equals("add")) 
       return new PlusOperator(); 
     else if(name.equals("sub")) 
       return new SubOperator(); 
     else if(name.equals("mult")) 
       return new MultOperator(); 
     else if(name.equals("div")) 
       return new DivOperator(); 
     else 
      return null; 
    } 

    public double operate(double a, double b) { 
     throw new UnsupportedOperationException("Not supported yet."); 
    } 

    public String printName() { 
     throw new UnsupportedOperationException("Not supported yet."); 
    } 

} 

public class PlusOperator extends OperatorFactory { 



    public double operate(double a, double b) { 
     return a + b; 

    } 

    public String printName() { 
     return "Add"; 
    } 

} 




public class PlusOperator extends OperatorFactory { 



    public double operate(double a, double b) { 
     return a + b; 

    } 

    public String printName() { 
     return "Add"; 
    } 

} 
+0

Pourquoi imprimer quelque chose? Vous êtes en train de le construire, sans appeler sa méthode ** printName() **. – Jack

+0

"Je ne reçois rien imprimé". Eh bien, le code ne le fait nulle part. Où/comment imprimez-vous quelque chose? – BalusC

+0

"Je ne reçois rien imprimé" - Où et qu'essayez-vous d'imprimer? Je ne le vois pas dans votre code ici –

Répondre

3

Vous appelez jamais add.printName(), et vous ne certainement rien ne sort pas, donc je Je ne suis pas surpris que rien ne soit imprimé.

0

ne ressemble pas à votre méthode get() appelle printName(), donc il ne doit pas imprimer quoi que ce soit.

2

Avez-vous essayé d'imprimer le nom?

ArithmeticOperator add = OperatorFactory.get ("add"); 
System.out.println(add.printName()); 

En outre, le PlusOperator devrait mettre en œuvre directement ArithmeticOperator. L'usine ne doit pas implémenter ArithmeticOperator. Cela vous permet de supprimer les méthodes operate et printName de la classe d'usine.

0

Vous devez appeler add.printName() si vous souhaitez la sortie du nom de l'opérateur.

0

Je ne vais pas répéter ce que tout le monde a déjà dit - à la place, voici quelques choses à essayer dans l'avenir si vous avez ce problème.

Une bonne première vérification de ce problème consiste à exécuter votre code dans un outil de couverture de code (j'utilise EclEmma dans Eclipse - je suis sûr qu'il y en a d'autres qui sont bons). Cela vous montrera que rien ne s'imprime parce que la méthode printName() n'est pas appelée.

Une autre façon de déboguer ce dans Eclipse est par un clic droit sur la source, en choisissant « Références> Projet. » Cela vous montrera d'où la méthode printName() est appelée, et vous verrez qu'elle n'est pas appelée parce qu'elle n'est référencée nulle part.