2014-09-13 101 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()?有沒有辦法訪問另一個匿名類中的匿名類?

// EDITED 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

通常情況下,這是不可能的,因爲是一個接口,接口沒有字段。但是,可以使用反射來訪問此字段。這有點破解,我不會建議在「真實世界」中使用它!

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(); 
}