你能告诉我这行怎么运行....我的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";
}
}
答案 0 :(得分:3)
你永远不会打电话给add.printName()
,你肯定不输出任何东西,所以我并不感到惊讶,没有任何东西被打印出来。
答案 1 :(得分:2)
你真的试过打印这个名字吗?
ArithmeticOperator add = OperatorFactory.get ("add");
System.out.println(add.printName());
此外,PlusOperator
应直接实施ArithmeticOperator
。工厂不应该实施ArithmeticOperator
。这允许您从工厂类中删除operation和printName方法。
答案 2 :(得分:0)
看起来你的get()方法看起来不像printName(),所以它不应该打印任何东西。
答案 3 :(得分:0)
如果您想输出运营商的名字,请致电add.printName()
。
答案 4 :(得分:0)
我不会重复其他人已经说过的话 - 相反,如果你遇到这个问题,今后可以尝试一些事情。
对此问题进行良好的第一次完整性检查是在代码覆盖率工具中运行代码(我在Eclipse中使用EclEmma - 我确信还有其他好的代码)。这将显示没有任何内容被打印,因为没有调用printName()
方法。
在Eclipse中调试此方法的另一种方法是右键单击源代码,选择“References> Project”。这将显示调用printName()方法的位置,并且您将看到它未被调用,因为它未从任何地方引用。