我有这个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
参数传递给它?
答案 0 :(得分:18)
我会创建一个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);
}
};
}
答案 1 :(得分:4)
将其包装成方法(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);
}
}
}