Есть несколько простых классов тест-случай: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>>
, и это решит проблему, но я не хочу, я хочу понять, почему я не могу использовать дженерики уровня метода здесь.
С уважением, могу ли я правильно сказать, что я могу переопределить тип возвращаемого значения, но не аргументы метода, и что я должен придерживаться точно таких же сигнатур arg, даже если 'UserListCriteria' отлично вписывается во время выполнения? – Osw
@ Osw Я обновил ответ и надеюсь, что теперь станет ясно. –