Java интерфейсы ... быстрые вопросы - PullRequest
0 голосов
/ 11 марта 2010

подскажите, как работает эта строка .... мой OperatorFactory.get ("add") ничего не делает. Я ничего не печатаю

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

}

Ответы [ 5 ]

3 голосов
/ 11 марта 2010

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

2 голосов
/ 11 марта 2010

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

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

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

0 голосов
/ 11 марта 2010

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

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

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

0 голосов
/ 11 марта 2010

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

0 голосов
/ 11 марта 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...