我有一个接口方法:
List<User> getUsers(Query query);
及其实现:
List<User> getUsers(Query query){
..
return users;
}
我可以毫无问题地使用它:
Query q = new Query(..);
List<User> users = getUsers(q);
现在,我创建查询的子类:
class UserQuery extens Query{..}
并希望将此子类的实例传递到getUsers()方法中:
UserQuery uq = new UserQuery(..);
List<User> users = getUsers(uq); // does not work, as getUsers accepts only "Query"-objects
如接口中所定义,getUsers()仅接受“查询”对象,而不接受其子类。
如何使该方法更通用,以便它既可以接受查询对象又可以接受其所有子类?
我尝试过,但是在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;
}
**
**
仅当我传递“查询”对象时,它才起作用:
// This works:
Query q = new UserQuery(..);
List<User> users = getUsers(q);
// This does not work:
UserQuery uq = new UserQuery(..);
List<User> users = getUsers(uq);
要获取实际的查询对象,我必须使用强制转换,因此无法将UserQuery传递给方法。
List<User> getUsers(Query query){
UserQuery uq = (UserQuery) query;
return users;
}
答案 0 :(得分:1)
您可以生成方法,而不仅仅是参数。这将完成工作:
<E extends Query> List<User> getUsers(E query);
现在query
可以是Query
类型或它的任何其他子类。