簡體   English   中英

給定不可變 class 層次結構的重用防御復制方法的類型安全方法

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM