2014-09-24 48 views
6

我有了這個Predicate,它過濾我的總部設在日期Task對象:傳遞一個額外的(第二個)參數番石榴謂詞

Predicate<Task> startDateFiltering = new Predicate<Task>() { 
    @Override 
    public boolean apply(Task input) { 
     return input.getStartDate() != null 
       && input.getStartDate().after(date); 
    } 

}; 

毫無只要date變量訪問使用它的問題在上下文中。不過,我想使其可重複使用並將其嵌入在Task類本身,做這樣的事情:

public static final Predicate<Task> startDateFiltering = new Predicate<Task>() { 
    @Override 
    public boolean apply(Task input) { 
     return input.getStartDate() != null 
       && input.getStartDate().after(date); 
    } 

}; 

爲了每次我需要它來訪問它Task.startDateFiltering。但如何將date參數傳遞給它?

回答

17

我想創建一個static工廠方法(或者乾脆直接一個新的實例每次)

public static Predicate<Task> startDateFilteringWithDate(final Date date) { 
    return new Predicate<Task>() { 
     @Override 
     public boolean apply(Task input) { 
      return input.getStartDate() != null 
       && input.getStartDate().after(date); 
     } 
    }; 
} 
+0

這就像一個魅力;-) – 2014-09-24 15:25:27

+0

簡單而優雅! – Chinmay 2017-11-20 15:23:12

3

裹成一個方法(Factory pattern種)。

public static Predicate<Task> startDateFiltering(Date date) { 
    return new Predicate<Task>() { 
     public boolean apply(Task input) { 
      return input.getStartDate() != null 
      && input.getStartDate().after(date); 
     } 
    } 
}