У меня есть метод интерфейса:
List<User> getUsers(Query query);
и его реализация:
List<User> getUsers(Query query){
..
return users;
}
Я могу использовать его без проблем:
Query q = new Query(..);
List<User> users = getUsers(q);
Теперь я создаю подкласс Query:
class UserQuery extens Query{..}
и хотите передать экземпляр этого подкласса в getUsers () - метод:
UserQuery uq = new UserQuery(..);
List<User> users = getUsers(uq); // does not work, as getUsers accepts only "Query"-objects
Как определено в интерфейсе, getUsers () принимает только объект «Запрос», но не его подкласс.
Как я могу сделать метод более универсальным, чтобы он мог принимать Query-объекты, но также и все его подклассы?
Я пробовал это, но в Java это невозможно:
Интерфейс:
// is not possible in java
List<User> getUsers(<E extends Query> query);
// also not possible in java
List<User> getUsers(Object<? extends MarketdataQuery> query);
Реализация:
// is not possible in java
List<User> getUsers(<E extends Query> query){
..
return users;
}
**
EDIT:
**
Работает только тогда, когда я передаю «Запрос» -Объект:
// This works:
Query q = new UserQuery(..);
List<User> users = getUsers(q);
// This does not work:
UserQuery uq = new UserQuery(..);
List<User> users = getUsers(uq);
Чтобы получить настоящий Query-Object, мне нужно использовать приведение, поэтому я не могу передать UserQuery в метод ..
List<User> getUsers(Query query){
UserQuery uq = (UserQuery) query;
return users;
}