2010-03-11 6 views
0

не могли бы вы рассказать мне, как работает эта линия .... мой OperatorFactory.get ("add") ничего не делает. Я не получаю ничего печататьсяjava interfaces ... быстрые вопросы

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

когда я следующее:

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

Почему вы должны получить что-то напечатанное? Вы просто строите его, не называя его метод ** printName() **. – Jack

+0

«Я ничего не печатаю». Ну, код ничего не делает. Где/как вы что-то печатаете? – BalusC

+0

«Я ничего не печатаю» - Где и что вы пытаетесь напечатать? Я не вижу этого в вашем коде здесь –

ответ

3

Вы никогда не называйте add.printName(), и вы, конечно, не выводят ничего, так что я Не удивляюсь, что ничего не печатается.

0

Не похоже, что ваш метод get() вызывает printName(), поэтому он ничего не должен печатать.

2

Вы действительно попробовали напечатать имя?

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

Кроме того, PlusOperator следует осуществлять ArithmeticOperator непосредственно. Фабрика не должна внедрять ArithmeticOperator. Это позволяет удалить методы работы и printName из заводского класса.

0

Вы должны позвонить add.printName(), если хотите получить имя оператора.

0

Я не буду повторять то, что говорили все остальные, вместо этого вот несколько вещей, которые нужно попробовать в будущем, если у вас есть эта проблема.

Хорошая первая проверка здравомыслия для этой проблемы заключается в том, чтобы запустить ваш код в инструменте покрытия кода (я использую EclEmma в Eclipse - я уверен, что там есть другие хорошие). Это покажет вам, что ничего не печатается, потому что метод printName() не вызывается.

Другой способ отладки этого в Eclipse - щелкнуть правой кнопкой мыши по источнику, выбрав «Ссылки> Проект». Это покажет вам, откуда вызывается метод printName(), и вы увидите, что он не вызывается, потому что на него не ссылаются нигде.

Смежные вопросы