![](/img/trans.png)
[英]How to define an interface method to accept a class or any of its subclasses in Java?
[英]How to make "generic method declaration" to accept subclasses
我有一個接口方法:
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-Objects 及其所有子類?
我試過了,但在 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;
}
您可以泛型方法,而不僅僅是參數。 這將完成以下工作:
<E extends Query> List<User> getUsers(E query);
現在query
可以是Query
類型或它的任何其他子類。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.