java - 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()) {}
解决方案
看看Predicate<T>
和它的and
或or
。
MyClass instance = new MyClass();
Predicate<MyClass> predicate = MyClass::rule1;
if (predicate.and(MyClass::rule2).or(MyClass::rule3).test(instance)) {
// todo
}
它可能看起来不如您提到的版本可读,重命名MyClass
为更有意义的东西会有所帮助。如果它不适合您,请考虑编写Builder。可以在动态 SQL 构建器(例如jooq)中找到很好的复杂示例。
推荐阅读
- tensorflow - 使用 tf.data.experimental.make_csv_dataset 或 read_csv 选项预处理图像
- c++ - 为 depth_first_search 定义 ColorMap 的最简单方法
- indexing - nutch 1.15 索引多核与 solr 7.5
- xamarin.forms - ViewModelViewHost,已知哪些嵌套视图组合可以在 XAMFORMS 中工作?
- c# - 如何在表单加载时从上到下自动向下滚动 Windows 表单面板上的滚动条?
- google-cloud-messaging - FCM 中是否有dry_run 功能?
- python - 从 URL 加载非常大的 json 文件时出现内存错误
- php - 如何在运行 PHP 7.2 的本地 Google App Engine 上上传文件?
- python-2.7 - 列表参数在函数内部不起作用
- dredd - Dredd:Ruby-hooks:为多个请求执行相同的钩子