2010-03-11 4 views
0

이 줄의 작동 방식을 알려주십시오 .... 내 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

왜 인쇄를해야합니까? ** 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을 구현하면 안됩니다. 이를 통해 factory 클래스에서 operations 및 printName 메서드를 제거 할 수 있습니다. 당신이 출력 운영자의 이름을하려는 경우

0

당신은 add.printName()를 호출해야합니다. 대신, 여기에이 문제가있는 경우 미래에 시도하는 몇 가지의 -

0

이미 다른 사람들이 말을 반복하지 않을 것이다.

이 문제에 대한 좋은 첫 전성 검사는 코드 커버리지 도구 (- 내가 거기에 다른 좋은 사람있을거야 내가 이클립스에서 EclEmma 사용)에서 코드를 실행하는 것입니다. 이렇게하면 printName() 메서드가 호출되지 않기 때문에 아무 것도 인쇄되지 않는다는 것을 알 수 있습니다.

이클립스에서이 문제를 디버깅하는 또 다른 방법은 선택하는 소스를 마우스 오른쪽 버튼으로 클릭입니다 "참조> 프로젝트를." 그러면 printName() 메서드가 호출되는 위치가 표시되며 아무 곳에서나 참조되지 않기 때문에 호출되지 않는 것을 볼 수 있습니다.