2015-09-18 117 views
0

我有這樣的接口:實現接口 - 方法簽名錯誤

public interface IAppointmentDAO extends IAppointmentDate { 
    void close(); 

    void deleteAppointment(long id); 

    Appointment getAppointment(long id); 

    List<Appointment> getGroomerAppointmentsByDate(int groomerId, Calendar date); 

    List<Appointment> getGroomerAppointmentsByDate(int groomerId, 
      Calendar date, int appId); 

    List<Event> getGroomerEventsByDate(int groomerId, Calendar date); 

    boolean isEmptyDate(int day, int month, int year, int groomerId); 

我有一個實現該接口的類。它有這種方法:

@Override 
     public boolean isEmptyDate(int day, int month, int year, int groomerId) { 
      Calendar today = Calendar.getInstance(); 
      today.set(year, month, day, 0, 0, 0); 
      today.set(Calendar.MILLISECOND, 0); 

      Calendar tomorrow = Calendar.getInstance(); 
      tomorrow.set(year, month, day + 1, 0, 0, 0); 
      tomorrow.set(Calendar.MILLISECOND, 0); 

      String[] insertArgs = new String[] { 
        String.valueOf(today.getTimeInMillis()), 
        String.valueOf(tomorrow.getTimeInMillis()), 
        String.valueOf(groomerId) }; 
      Cursor cursor = database.rawQuery(
        SQLiteConstants.COUNT_APPOINTMENTS_FOR_DATE, insertArgs); 
      try { 
       if (cursor.moveToFirst()) 
        return cursor.getInt(0) > 0 ? false : true; 
       return true; 
      } finally { 
       cursor.close(); 
      } 
     } 

我們可以看到該方法的簽名與接口中的底部簽名相同。但是,我的類有一個錯誤,說它沒有實現接口中的所有方法。我做的quickfix使類實現從界面的方法和它提供的類用這種方法:

@Override 
    public boolean isEmptyDate(int day, int month, int year, long id) { 
     return false; 
    } 

爲什麼Android的工作室認爲我的接口isEmptyDate方法採用long類型的id參數?

+0

嘗試清理緩存(文件 - 無效的緩存/重新啓動)並重建項目 –

+0

看起來很奇怪。 –

+0

如果可用的兩個版本的方法名稱相同,則需要同時執行 – SacJn

回答

2

我想用長id參數的方法來自IAppointmentDate接口。

+0

好的想法,但這次不是這種情況。在我的界面中,'boolean isEmptyDate(int day,int month,int year,int groomerId);'是灰色的,表示它從不使用。 – BeniaminoBaggins

+0

這可能是正確的(從未使用過),因爲沒有人叫它。你可以發佈這兩個接口的完整代碼 - IAppointmentDAO和IAppointmentDate嗎? –

+0

我看到它在IAppointmentDate接口中。傻我。謝謝! – BeniaminoBaggins

-2

看起來像問題的方法。 1.只需使用false初始化一個本地布爾變量。 2.將cursor.getInt(0)賦值給上面的變量。 3.最後返回這個變量。 4.它應該解決您的問題

+0

這甚至不涉及這個問題。 – Keppil