public Interface Predicate { public boolean isTruthy(Object o); } public abstract class Filter { public abstract makePredicate(int k); } public class TimeFilter extends Filter { public Predicate makePredicate(int k) { return new Predicate() { public boolean isTruthy(Object o) { return o.someBoolean; } } } }