2014-04-01 50 views
2

這裏是我的代碼來創建一個匿名內部類:我想在我的Java代碼

package com.chapter9.innerclass; 

public class AnonymousInnerClass { 

    private int i = 10; 

    private void f(){ 
     System.out.println("AnonymousInnerClass f()"); 
    } 

    public void h(){ 
     new Object{ 
      void g(){ 
       i++; 
       f(); 
      } 
     }.g(); 
     System.out.println("i = "+i); 
    } 

    public static void main(String[] args) { 
     // TODO Auto-generated method stub 
     AnonymousInnerClass aic = new AnonymousInnerClass(); 
     aic.h(); 
    } 

} 

正如你可以看到,我宣佈我的^ h內新的匿名Object類()函數。我嘗試使用h()使g()函數工作。但是,當我遵從代碼時,它給出以下消息:

線程「main」中的異常java.lang.Error:未解析的編譯問題:「」令牌 語法錯誤的「新」,預計接口 語法錯誤令牌,刪除()是未定義的類型AnonymousInnerClass

我應該怎麼做這個令牌 G所述的方法?請告訴我使用AnonymousInnerClass的確切方式。

+0

訪問克()閱讀:[匿名內部類在Java中(HTTP:// docs.oracle.com/javase/tutorial/java/javaOO/anonymousclasses.html) –

回答

5

new Object{

應該是:

new Object(){

3

雖然你的情況,你只是有一個錯字,一般的編譯器將不知道該方法g()存在,也就是說,如果你試圖在其他地方撥打g()它會失敗。

一般匿名內部類實現一個接口:

interface X { 
    void doSomething(); 
} 

// somewhere else: 
X x = new X(){ 
    void doSomething(){ 
    // implementation 
    } 
} 
// this call now works. 
x.doSomething(); 

注意,在Java中8實施具有隻有一個方法是即使使用Lambda表達式和功能接口按照this article更容易的接口。

1

同時請注意,一旦你分配對象類型的對象的任何引用變量,你將失去可能從外部