有幾個簡單的測試用例類:Java泛型,說明需要
public interface ListCriteria<T> {
// some stuff here
}
public class UserListCriteria implements ListCriteria<User> {
// implementation
}
public interface Editor<T> {
// sample method 1
List<T> listObjectsTest1(ListCriteria<T> criteria);
// sample method 2
<L extends ListCriteria<T>> List<T> listObjectsTest2(L criteria);
}
而且有大量Editor
實現的Java認爲它不適用於這兩種樣品的方法提供必要的實施:
public class UserEditor implements Editor<User> {
@Override
public List<User> listObjectsTest1(UserListCriteria criteria) {
//
}
@Override
public List<User> listObjectsTest2(UserListCriteria criteria) {
//
}
}
這兩種方法的實現都是錯誤的。問題是爲什麼。特別是對於後一種方法。 當然我可以做interface Editor<T, L extends ListCriteria<T>>
,這將解決這個問題,但我不想,我想明白爲什麼我不能在這裏使用方法級別的泛型。
謝謝,我能得到你的權利,說我可以覆蓋的返回類型,而不是方法的參數,即使'UserListCriteria'完全在運行時符合,我必須堅持以完全相同的ARG簽名? – Osw
@Osw我更新了答案,並希望現在更清楚 –