我有一个类来验证私有成员变量是否匹配作为谓词传入的某些条件
public class Verifiable<T> {
private final T t;
private Verifiable(T t) {
this.t = t;
}
public static <T> Verifiable<T> of(T objToBeVerified) {
return new Verifiable<T>(objToBeVerified);
}
public List<Predicate<T> verify(List<Predicate<T>> predicates) {
// test against each predicate and return the failed predicates
}
}
Usage:
List<Predicate<T>> predicatesToTest = ...
List<Predicate<T>> failedPredicates = Verifiable.of(someObj).verify(predicatesToTest);
我想打印失败的谓词,特别是谓词测试的内容。我可以通过创建实现Predicate的类的实例来实现这一点,比如NamedPredicate。该类可以包含名为“name”的成员变量。这种方法至少有两个限制:无法传递lambda表达式,并且需要创建NamedPredicate的实例。
这个问题有更好的解决方案吗?
答案 0 :(得分:3)
因此,您需要将String
绑定到Predicate
1)创建类似元组的内容,这是NamedPredicate
背后的想法。
public class NamedPredicate<T> {
Predicate<T> predicate ;
String name ;
}
请始终支持封装而不是继承,并避免使用此类
public class NamedPredicate<T> extends Predicate<T> {
String name ;
}
2)使用Map
。 Map<String, Predicate<T>>
应该可以做到这一点,但您可以使用Map<Predicate<T>, String>
取决于您的架构。
public List<Predicate<T> verify(Map<String, Predicate<T>> predicates) {
List<Predicate<T>> failed = new ArrayList<>();
for( String name : predicates.keySet() ){
System.out.println("Testing "+name+" on "+t);
// test predicates.get(name), add failed test to failed list.
}
return failed ;
}