2010-04-16 3 views
0

일부 샘플 코드에는 다른 메서드 및/또는 클래스 내에서 선언 된 메서드와 클래스가 있습니다.이상한 Java 코드 : 클래스의 클래스

나는 그것에 대해 들어 본 적이/읽었습니다. 이런 종류의 프로그래밍에는 어떤 영향이 있습니까? 클래스가 다른 파일과 메소드에 나란히 적어 두는 것이 좋을까요 (모든 책에서 알려줍니다). 이러한 종류의 프로그래밍의 장점과 단점은 무엇입니까?

여기에 무슨 뜻인지의 예 :

익명의 내부 클래스라고
Handler mHandler = new Handler() { 
    public void handleMessage(android.os.Message msg) { 
     TextView textView = (TextView) findViewById(R.id.description); 
     textView.setText(mRoad.mName + " " + mRoad.mDescription); 
     MapOverlay mapOverlay = new MapOverlay(mRoad, mapView); 
     List<Overlay> listOfOverlays = mapView.getOverlays(); 
     listOfOverlays.clear(); 
     listOfOverlays.add(mapOverlay); 
     mapView.invalidate(); 
    } 
}; 

답변

6

.

둘 다 주로 혼자 작동하지 않지만 주변 개체에 액세스해야하는 클래스를 만드는 데 사용됩니다. 이러한 클래스는 전체 주변 객체에 대한 모든 액세스 권한을 갖습니다 (예외 : 정적 내부 클래스의 정의).

+0

빠른 답변을위한 Thx ...하지만 한 가지 질문은 공개 된 채로 남아 있습니다 ... 한 번만 사용되는 경우 맨 위에있는 코드와 같은 방법을 선언하는 이유는 무엇입니까? 그럴만한 이유가 있습니까? – poeschlorn

+0

다른 코드를 살펴보십시오. 핸들러는 현재 클래스와 이벤트 시스템 사이의 다리 역할을합니다. 이 방법으로 현재 클래스는 Handler 클래스/인터페이스를 확장하거나 구현할 필요가 없습니다. – ZeissS

+0

Java에는 실제로 4 가지 유형의 내부 클래스가 있습니다. http://download.oracle.com/javase/tutorial/java/javaOO/summarynested.html – Richard

4

. 클래스를 한 곳에서만 사용하고 클래스가 짧고 간단하다고 가정하면 공용 클래스를 만들지 않아도됩니다.

This page에는 익명의 내부 클래스에 대한 자세한 정보가 들어 있습니다.

1

그래, 익명 클래스라고합니다.

당신은 여기에 대한 자세한 내용을보실 수 있습니다 : 내부 클래스와 익명 클래스 : 클래스에있을 수있는 클래스의 두 가지 유형이 있습니다 http://docstore.mik.ua/orelly/java-ent/jnut/ch03_12.htm

2

Here은 익명의 클래스에 대한 유용한 정보이며 유용한 이유입니다. 클래스의 구현이 매우 짧고 다른 곳에서는 재사용되지 않는 시나리오에서 주로 사용됩니다. 이 익명 구현을 사용하면 코드를 간결하고 간결하게 유지할 수 있습니다.

1

내부 클래스에는 명시 적 포인터가 없어도 컨테이너 클래스를 참조 할 수 있다는 이점이 있습니다.

익명으로하는 것은 간결한 문제입니다. 공유지의 예

1

하나는 리스너의 구현 :

class myPanel extends JPanel { 
    public MyPanel() { 
     JButton b1 = new JButton("Hello"); 
     b1.addActionListener(
      new ActionListener() { 
       public void actionPerformed(ActionEvent e) { 
        // do something for button b1 
       } 
      } 
     ); 
    } 
} 

이제 리스너 구현 할 수있는 몇 가지 외부 클래스 (myPanel) 특성에 의존한다는 것을 상상한다. 익명 클래스 사용하기 쉽게 할 수 있습니다.

2

익명 클래스는 작업하는 인터페이스의 작은 구현 (예 : EventListeners)을 정의 할 때 일반적입니다. 그들에 대해 주목해야 할 한가지는 final로 선언되지 않는 한 로컬 변수 (및 매개 변수)에 액세스 할 수 없다는 것입니다.