2014-09-13 3 views
2
interface A { 
    void show(); 
} 

public class Static { 
    public static void main(String args[]) { 
     A a = new A(){ 
      public void show(){ 
       System.out.println("In anonymous Class"); 
       A b =new A(){ 
        public void show(){ 
         System.out.println("In nested Anonymous Class"); 
        } 
       }; 
      } 
     }; 
     //a.show(); 
    } 
} 

"중첩 된 익명 클래스"를 인쇄하려면 a.show() 대신 무엇을 사용해야합니까?다른 익명 클래스에서 익명 클래스에 액세스하는 방법이 있습니까?

//하지만 클래스 자체 내부 ... 고마워 그러나 불행하게도 잘못 입력 한 코드가 .... 내가하는 방법 내부 익명 클래스를 의미하지 않았다 LATER

을 편집했다. 실수해서 미안해. 다음은 수정 된 코드입니다.

interface A { 
    void show(); 
} 

public class Static { 
    public static void main(String args[]) { 
     A a = new A() { 
      public void show() { 
       System.out.println("In anonymous Class"); 
      }; 

      A b = new A() { 
       public void show() { 
        System.out.println("In nested Anonymous Class"); 
       } 
      }; 
     }; 
     a.show(); 
    } 
} 

답변

1

일반적를 A는 인터페이스 및 인터페이스가 필드를 가지고 있지 않기 때문에, 그것은 불가능합니다. 그러나 리플렉션을 사용하여이 필드에 액세스 할 수 있습니다. 그것은 해킹 조금이지만 나는 "현실 세계"에서 이것을 사용하는 것이 좋습니다 않을거야!

interface A { 
    void show(); 
} 

public class Static { 
    public static void main(String args[]) throws IllegalArgumentException, IllegalAccessException, SecurityException, NoSuchFieldException { 
     A a = new A() { 
      public void show() { 
       System.out.println("In anonymous Class"); 
      }; 

      public A b = new A() { 
       public void show() { 
        System.out.println("In nested Anonymous Class"); 
       } 
      }; 

     }; 
     // Get the anonymous Class object 
     Class<? extends A> anonymousClass = a.getClass(); 
     // Get field "b" 
     Field fieldB = anonymousClass.getField("b"); 
     // Get the value of b in instance a and cast it to A 
     A b = (A) fieldB.get(a); 
     // Show! 
     b.show(); 
    } 
} 

참고 : 더 나은 방법은 인터페이스에서 변수 b에 대한 getter를 선언하는 것입니다.

0

클래스 선언 직후에 b.show();을 호출합니다.

   A b =new A(){ 
        public void show(){ 
         System.out.println("In nested Anonymous Class"); 
        } 
       }; 
       b.show(); 
0

대신a.show()의 사용해야 아무것도 없다. 그 줄은 당신이 그것을 놓고 주석을 제거한 곳이어야합니다. 또한 당신이 b.show() 내부 필요

public static void main(String args[]) { 
    A a = new A(){ 
    public void show(){ 
     System.out.println("In anonymous Class"); 
     A b =new A(){ 
     public void show(){ 
      System.out.println("In nested Anonymous Class"); 
     } 
     }; 
     b.show(); 
    } 
    }; 
    a.show(); 
}