nim*_*o23 1 java generics design-patterns
我有一个界面
public interface Query {
}
Run Code Online (Sandbox Code Playgroud)
及其实现:
public class UserQuery implements Query {
// specific properties to query a user
}
Run Code Online (Sandbox Code Playgroud)
和另一个界面
public interface Queries{
protected void runQuery(Query q);
}
Run Code Online (Sandbox Code Playgroud)
以及利用它的实现:
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;
..
}
Run Code Online (Sandbox Code Playgroud)
}
所有作品,但是,如何避免强制转换runQuery(Query q)(可能带有runQuery(Query<T> q))?
想象一下,一组不同的实现的Query(UserQuery,StoreQuery,BalanceQuery,等等-与上面的解决方案,我不得不在这是一个有点尴尬每次重写方法的显式转换。
对于上述用例,是否有更好的设计模式?
您可以创建Queries一个通用接口:
public interface Queries<Q extends Query> {
protected void runQuery(Q q);
}
Run Code Online (Sandbox Code Playgroud)
然后,UserQueries可以使用特定的类型Query:
public class UserQueries implements Queries<UserQuery> {
@Override
protected void runQuery(UserQuery q) {
// q is a UserQuery, no need to cast anything...
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
51 次 |
| 最近记录: |