我使用类似于 builder/fluid API 的模式来配置一些计时服务。我知道它不是一个典型的构建器,但它看起来非常好,我想保持这种风格。
看起来像:
Action someAction = getAction();
someAction.shouldRunEvery(5).seconds();
最后一个动词可以是秒()、分钟()、毫秒()等。 链中最后一个方法中的代码实际上将更改写入存储库。 典型的错误(尽管我知道内部原理,但我已经犯了不止一次)是使用这样的方法:
someAction.shouldRunEvery(10);
有没有办法确保在对象上调用接口(interface)的函数? 我可以使用 java 8/9 和/或其他库的任何功能。
补充1: 流体 API 是如何生产的:
interface Action{ ActionUnit shouldRunEvery (int time);}
interface ActionUnit { void seconds(); void minutes(); ... etc.}
补充2: 我试图研究异常(exception)情况,但不知道如何将它们缝合并保持整洁。
补充3: 可能最好的答案是将 API 更改为如下所示:
someAction.shouldRunEvery(seconds(5));
但在这种情况下我失去了流动性。
最佳答案
Java 中没有好的方法,但仍然是可能的。您可以在这里找到“安全生成器”示例 Generator of Turing Machines that run on Java generic types 。 该示例利用了 Java 泛型是图灵完备这一事实。您可以阅读原文(仅限俄语Тьюринг-полнота Generic типов Java)
但恐怕这对于现实生活来说太糟糕了。
关于java - Java 中是否有一个功能可以确保该方法被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45977001/