[英]Type-safe way to reuse defensive copy method given immutable class hierarchy
我有一个基数 class 和一个派生的 class,两者都设计为不可变的(省略了 ctor 和 getter):
public class PageQuery<T> {
private final T queryFilter;
private PageCond pageCond; // pagination parameter
// E withPageCond(PageCond newPageCond) {
// return a brand new copy of `this` with `pageCond` replaced with `newPageCond`
// that can be reused across class hierarchy
// }
}
public class PageSortQuery<T> extends PageQuery<T>{
private final SortCond sortCond; // sorting parameter
}
如何添加一个方法,将this
的防御副本返回到基 class,以便该层次结构中的所有类都可以从中受益? 有没有办法在没有clone()
的情况下完成它?
我不知道你的意思是不是这样的,在这种情况下,如果你调用 withFilter 方法,原点不会改变。
@AllArgsConstructor
public class Query <T> {
@Getter
private final String name;
@Getter
private final Predicate<T> filter;
public Query<T> withFilter(Predicate<T> filter){
return new DelegatingQuery<T>(this){
@Override
public Predicate<T> getFilter() {
return Query.this.filter;
}
};
}
static class DelegatingQuery<T> extends Query<T>{
@Delegate
private final Query<T> query;
public DelegatingQuery(Query<T> query) {
super(query.name,query.filter);
this.query = query;
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.