5

나는 자바를 가르치려고 노력 중이며 지금까지 대답 할 수 없다는 의문을 가지고있다. 온라인 독서 중 일부에서는 동일한 일을하는 것처럼 보이는 행동 청취자를 사용하는 두 가지 방법을 발견했습니다. 그러나 나는 다른 것의 장점/단점이 무엇인지 알아 내려고 노력 중이다.자바 액션 리스너 : 익명 클래스 구현

은 다음과 같이 익명 클래스를 사용하는 것이 더 좋은가요 :

public MyClass() { 
... 
    myButton.addActionListener(new ActionListener(){ 
     public void actionPerformed(ActionEvent e) { 
      //doSomething 
     } 
    }); 
... 
} 

을 정도 같은 클래스의 시작 부분에 구현하는 것이 최선이다 :

public MyClass() implements ActionListener { 
... 
    myButton.addActionListener(this); 

    public void actionPerformed(ActionEvent e) { 
     //doSomething 
    } 
... 
} 
+1

가능한 중복 : http://stackoverflow.com/questions/5451010/nested-class-vs-implements-actionlistener –

답변

1

이것은 실제로 스타일에 달려 있습니다. 둘 다 코드에서 정확히 같은 방식으로 수행됩니다.

별도의 클래스를 사용하면 실제 메소드 내부의 코드를보다 단순하게 유지하는 반면 익명의 내부 클래스는 메소드 내에서 리스너 구현을위한 코드를 가져와 수행중인 작업을 명확하게 할 수 있습니다.

익명의 내부 클래스가이를 생성하는 메서드에서 최종 변수에 액세스 할 수있는 경우도 있습니다. 변수를 컨트롤러에 전달할 수는 있지만 미리 작성된 클래스로는이를 수행 할 수 없습니다.

별도의 코드를 다시 사용할 수 있습니다. 여러 청취자에서 동일한 청취자가있는 경우 확실한 승자입니다.

3

클래스가 정말로 경우에만 ActionListener (is-a relationship)이며 다른 곳의 ActionListener로 사용되며 ActionListener를 구현해야합니다.

방금 ​​ActionListener로 내부적으로 사용되는 경우 클래스의 API에 구현 정보가 누설됩니다. 이 경우 구성을 사용하십시오 (has-a relationship).

다른 인터페이스와 수퍼 클래스에도 마찬가지입니다.

0

익명 클래스를 사용하는 경우 코드가 읽기 쉽지만 다시 사용하지 못할 수도 있습니다.

이렇게 짧으면 익명의 클래스 만 사용하고 어디서나 다시 사용할 필요가 없습니다.