2015-04-18 77 views
2

當我在Netbeans(我正在測試我的LightMateConnection類)中編寫下面的代碼時,它編譯並運行時沒有錯誤。Android Studio不識別匿名類嗎?

public class Main { 
    public static void main(String[] args){ 
     final LightMateConnection a = new LightMateConnection(); 
     a.addConnectionListener(new ConnectionListener() 
     { 
      @Override 
      void onConnect(){ 
       //Do Stuff 
      } 
      @Override 
      void onDisconnect(){ 
       //Do Stuff 
      } 
     }); 
    } 
} 

既然它適用於Netbeans,我想到當我轉移到Android Studio時,幾乎相同的代碼仍然可以工作。我創建了下面的構造函數:

public MainActivity(){ //Note that this is a constructor, not a class 
    super(); 

    LightMateConnection lmc = new LightMateConnection(); 
    lmc.addConnectionListener(new ConnectionListener() 
    { 
     @Override 
     void onConnect(){ 
      //Do Stuff 
     } 
     @Override 
     void onDisconnect(){ 
      //Do Stuff 
     } 
    }); 
} 

Android Studio給我3個錯誤。在第4行,有...(new ConnectionListener(),我得到「從ConnectionListener派生的類」匿名類必須聲明爲抽象或在'ConnectionListener'中實現抽象方法'onConnect()'。很明顯,我正在下面實施這些方法,Netbeans能夠繼續。我的其他兩個錯誤在Override註解中,它們是「方法不會覆蓋超類的方法」。

這就像Android Studio不像Netbeans那樣解釋我的代碼。

+1

Android Studio是否從正確的包中導入'ConnectionListener'? – stkent

+0

是的,這是我自己的'ConnectionListener': 'import com.coolkev.lightmate.ConnectionListener;' –

+0

嘗試重新啓動,可能是一些AS'故障,有時會發生 – AndroidEx

回答

0

這個問題最終與我將代碼移到Android Studio時發生了變化,並且突然之間我無法實現非公共方法。

這就解釋了爲什麼我得到的方法沒有被覆蓋錯誤,因爲默認可見性方法沒有被覆蓋,因爲它們在我的程序包代碼中看不到。

我對該問題的解決方案是使ConnectionListener的方法爲public,因此可以在包外部訪問它們。