2010-03-11 62 views
0

你能告诉我这条线是如何工作的....我的OperatorFactory.get(“add”)没有做任何事情。我没有收到任何印刷java接口...快速问题

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 2010-03-11 14:58:52

+0

“我没有得到任何印刷品”。那么,代码不会在任何地方做到这一点。你在哪里/如何印刷一些东西? – BalusC 2010-03-11 14:58:55

+0

“我没有得到任何印刷品” - 你在哪里打印什么?我没有看到你的代码在这里 – 2010-03-11 14:59:04

回答

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()方法被调用这里,你会看到,它不会被调用,因为它没有从任何地方引用。