2010-04-21 4 views
8

자바에 익숙하지 않으므로이 말도 안되는 간단한 질문인데도 불구하고 {code}를 가져 오는이 메소드 호출에 대해 궁금합니다. addSelectionListener 메서드의 예제는 아래 코드를 참조하십시오. 이것의 목적은 무엇입니까? 나는 explaination에 대한 워드 프로세서를 찾고 있지만이 연습이 유용한 정보를 전혀 신경 쓰지 않는 것을 발견하는 것 같습니다. 이것이 Anonymous Class, 또는 익명 내부 클래스Java 구조는 무엇을합니까?

+4

익명의 클래스가 다시 공격합니다! 사람들이 그 이름을 모른다는 것에 대한 참조를 찾을 수 없다는 것을 정말로 비난 할 수는 없다 ... –

+5

"나는 자바가 처음이에요 ..."- 당신은 얘들 아 :-) –

+0

내가 자바를 배우기 시작할 때 나는 이것들과 힘들었다. – Skurmedel

답변

7

제공 할 수있는 모든 도움이나 통찰력

setStatusLine.addSelectionListener(new SelectionAdapter() { 
     public void widgetSelected(SelectionEvent e) { 

      String message = "I would like to say hello to you."; 
      if (pressed) { 
       message = "Thank you for using me"; 
      } 
      setStatusLine(message); 
      pressed = !pressed; 
     } 
    }); 

감사합니다. 당신이 google에 대한 약간의 tutorials/예제를 찾을 수 있습니다. 일 has some docs 너무.

+0

도움을 주신 분들께 감사드립니다. 많은 감사를드립니다. – BandyOrc

2

사실 메서드 호출이 없습니다 ... 이 코드는 setStatusLine 구성 요소에 선택 수신기를 설정합니다.

코드 등가는

public class X implements SelectionListener{ 

    //In the constructor or an other method. 
    setStatusLine.addSelectionListener(this); 

    public void widgetSelected(SelectionEvent e) { 

     String message = "I would like to say hello to you."; 
     if (pressed) { 
      message = "Thank you for using me"; 
     } 
     setStatusLine(message); 
     pressed = !pressed; 
    } 

} 
3

메소드 addSelectionListener가 SelectionListener 인스턴스를 수신 할 수있다. "코드"를받지 못합니다. 혼란스러운 것은 새로운 < 클래스/인터페이스 이름>() {...}을 사용하는 것입니다. 이 구조는 anonymous inner classes에 사용됩니다. 실제로 위의 코드는 SelectionAdapter 클래스를 확장하여 widgetSelected 메서드를 재정의하고 새 클래스의 인스턴스를 만든 다음 addSelectionListener()에 전달합니다.

익명 내부 클래스 사용은 특정 클래스에서 사용되는 새 클래스를 만드는 리스너와 공통적입니다. 따라서 우리는 이름을 밝히지 않으며, 사용되는 상황에서 직접 구현하는 것을 선호합니다. 다른 참여자로

4

이미 말했다 : 그것은 익명 클래스입니다

당신은 그런 찾고 McClass.java라는 새로운 파일에 MyClass에라는 이름의 새로운 클래스를 생성 한 수

: 그럼 당신을

class MyClass extends SelectionAdapter { 

    public void widgetSelected(SelectionEvent e) { 
    <your code that's being executed whenever the widget is being selected> 
    } 

} 

을 다음과 같이 첫 줄을 바꿀 수있었습니다.

setStatusLine.addSelectionListener (new MyClass());

참조? 이제는 함수 하나만있는 "명시 적"클래스가 있습니다. 종종 오버 헤드가 너무 많아 디자인이 혼란 스러울 수 있습니다.

도움이 되었습니까?

0

익명 내부 클래스를 이해하는 데 어느 정도 시간이 걸렸습니다. 기억해야 할 기본 사항은 다음과 같습니다.

매개 변수는 마치 매개 변수와 같습니다. 인터페이스에 구현 된 클래스에서 전달하는 프리미티브 또는 객체 대신 전달되는 대신 메소드에 따라 클래스를 확장합니다 (예 : 인터페이스에서도 작동합니다). 매개 변수. 익명이므로 메서드가 스택에서 튀어 나온 직후 "사라집니다". }}); 익명의 내면 클래스에 대한 희생이다. 청취자 이벤트를 위해 사용자 인터페이스에서 자주 팝업합니다. 코드에 혼란을 피할뿐만 아니라 읽기 어렵게 만듭니다.전체 처벌

는 JLS를 읽어 http://java.sun.com/docs/books/jls/third_edition/html/expressions.html#15.9.5 당신이 그런 것들에 대해 본격 비교를 아는 SCJP 책을 읽고 시험은 좋은 일을하거나 JLS을 공부할 수에 관심이 있다면

. 코드 작성 방법은 배우지 않지만 Java가 어떤 식 으로든 다른 많은 OO 언어가 어떻게 작동하는지 이해하는 데 도움이됩니다.

관련 문제