今天在寫完基礎類後,編輯用戶的時候發生java.lang.AbstractMethodError:com.text.UserDaoImpl.editById(Ljava/lang/Integer;)Ljava/lang/Object異常。非常奇怪,認真的從controller->service->dao調用過程查看了一番,參數類型都正常,可是怎麼就發生類型轉換了呢?java
正確設計以下:ide
這個問題是由於接口中定義的方法名和實現類的的方法名相同,可是參數的數據類型卻不一致,並且實現類的方法沒有@Override形成的。設計
因此在實現接口或覆寫父類方法時,最好的實踐是加上@Override。code
錯誤代碼:接口
public interface UserDao<T>{ void editById(Integer id); } public UserDaoImpl<T,ID extends Serializable> implements UserDao<T>{ public void editById(ID id){ System.out.println("edit"); } }
正確代碼:it
public interface UserDao<T>{ void editById(Integer id); } public UserDaoImpl<T,ID extends Serializable> implements UserDao<T>{ @Override public void editById(Integer id){ System.out.println("edit" + (ID)id); } }