gpt4 book ai didi

java - 我可以避免使用 "generics"或更好的 "design patterns"进行显式转换吗?

转载 作者:行者123 更新时间:2023-11-29 07:24:40 24 4
gpt4 key购买 nike

我有一个界面

public interface Query {

}

及其实现:

public class UserQuery implements Query {
// specific properties to query a user
}

和另一个接口(interface)

public interface Queries{

protected void runQuery(Query q);
}

及其使用它的实现:

public UserQueries extends Queries{

@Override
protected void runQuery(Query q){

// can I avoid this explicit cast with generic type parameters or other design patterns?
// for example Query<UserQuery> ?
var uq = (UserQuery) q;
..

}

一切正常,但是,我怎样才能避免在 runQuery(Query q) 中进行强制转换? (也许用 runQuery(Query<T> q) )?

想象一下 Query 的一组不同实现( UserQueryStoreQueryBalanceQuery 等 - 使用上面的解决方案,我必须在每个覆盖方法中进行显式转换,这有点尴尬。

对于上述用例,是否有更好的设计模式?

最佳答案

您可以使Queries成为通用接口(interface):

public interface Queries<Q extends Query> {

protected void runQuery(Q q);
}

然后,UserQueries 可以使用特定类型的Query:

public class UserQueries implements Queries<UserQuery> {

@Override
protected void runQuery(UserQuery q) {
// q is a UserQuery, no need to cast anything...
}
}

关于java - 我可以避免使用 "generics"或更好的 "design patterns"进行显式转换吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56192952/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com