2013-02-14 9 views
0

"로컬 내부 클래스를 사용해야하는 곳"을 분명히 설명해 주시겠습니까?사용 장소 로컬 내부 클래스

예 : 여기 Local class

public class LocalTest 
{ 

    int b=30; 
    void display() 
    { 
     class Local{ 
      void msg() 
      { 

       System.out.println(b); 
      }  
     } 

     Local l = new Local(); 
     l.msg(); 
    } 

    public static void main(String args[]) 
    { 
     LocalTest lt = new LocalTest(); 
     lt.display(); 
    } 
} 

은 로컬 내부 클래스이다. display()에만 유용합니다. 우리는 이러한 로컬 내부 클래스를 어떤 유형의 상황에서 사용합니까?

+1

에 http : // docs.oracle.com/javase/tutorial/java/javaOO/nested.html –

+0

그 중 하나는 http://stackoverflow.com/questions/478804/advantage-of-local-classes-java/479937#479937에 링크되어 있습니다. 더 좋다. –

+0

로컬 내부 클래스를 사용해야 할 필요성을 느낄 때 즉각적인 질문은 다음과 같습니다. 리팩토링 할 시간이 아닌가? – assylias

답변

-1

나는 두 가지 용도가있을 수 있습니다 주장 할 것 :

  • 당신은 어쨌든 함수 내에서 사용되는 클래스와 해당 함수 외부 네임 스페이스를 오염하고 싶지 않아요.
  • 생성자를 통해 명시 적으로 변수를 전달하지 않고도 함수 내에서 선언 된 변수 (final)를 사용하려고합니다.
0

홈페이지 이유는 우리가 로컬로 몇 가지 인터페이스를 구현하고 어딘가를 통과해야하지만, 우리는 구현에 더 많은 방법을 추가 할 때, 그래서 익명의 구현이 적합하지 않습니다

public static void Main (String [] args) throws Exception 
{ 
    class MyRunnable extends Runnable 
    { 
     private boolean complete = false; 

     public synchronized void waitComplete() throws InterruptedException 
     { 
      while (!complete) wait(); 
     } 

     @Override 
     public void run() 
     { 
      // Do something useful 

      synchronized (this) 
      { 
       complete = true; 
       notifyAll(); 
      } 
     } 
    } 

    MyRunnable r = new MyRunnable(); 
    new Thread (r).start(); 

    // Do something in parallel with new thread 

    r.waitComplete(); // We forgot about Thread.join() 
} 
+0

그러나 실제로는 * local * 내부 클래스가 필요하지 않습니다. 보통의 내부 클래스로 충분할 것입니다. – Dolda2000

+1

@ Dolda2000 익명의 내부 클래스는 항상 로컬 내부 클래스로 바꿀 수 있습니다. 내부 클래스는 로컬이 아닌 내부 클래스로 바꿀 수 있습니다.이 내부 클래스는 최상위 클래스로 바꿀 수있는 정적 내부 클래스로 바꿀 수 있습니다. 로컬 내부 클래스는 구문 설탕입니다. –

+0

예. :) 당신이 만든 이슈의 * 특성화 *에서 오히려 그 점이 왜 회원 클래스가 아닌 로컬 클래스로 만들 것인지, 실제로는 최상위 클래스로 만들 것인지 분명하지 않습니다. . – Dolda2000

관련 문제