首页 > 解决方案 > Java模仿and,or为连接规则

问题描述

我有一个像下面这样的Java类

class MyClass {

public boolean rule1() {...}

public boolean rule2() {...}

public boolean rule3() {...}

}

例如,现在我想以多种方式检查上述类的规则,例如:

MyClass myClass = new MyClass();
if (myClass.rule1() && myClass.rule2 || myClass.rule3) {}

现在我想知道我怎样才能像这样实现上面的线?

if (myClass.rule1().and().rule2().or().rule3().accept()) {}

标签: java

解决方案


看看Predicate<T>和它的andor

MyClass instance = new MyClass();
Predicate<MyClass> predicate = MyClass::rule1;
if (predicate.and(MyClass::rule2).or(MyClass::rule3).test(instance)) {
  // todo
}

它可能看起来不如您提到的版本可读,重命名MyClass为更有意义的东西会有所帮助。如果它不适合您,请考虑编写Builder。可以在动态 SQL 构建器(例如jooq)中找到很好的复杂示例。


推荐阅读