繁体   English   中英

Java中是否有一项功能可以确保调用该方法

[英]Is there a feature in Java to make sure that method is called

我正在使用类似于builder / fluid API的模式来配置一些计时服务。 我知道它不是典型的构建器,但看起来非常不错,我想保留这种样式。

看起来像:

Action someAction = getAction();
someAction.shouldRunEvery(5).seconds();

最后一个动词可以是seconds(),minutes(),milliseconds()等。chain中last方法中的代码实际上将更改写入存储库。 典型的错误(尽管知道内部原理,但我已经多次这样做)使用的是这样的方法:

someAction.shouldRunEvery(10);

有没有办法确保在对象上调用接口的功能? 我可以使用Java 8/9和/或其他库的任何功能。

附加1:如何生成流体API:

interface Action{ ActionUnit shouldRunEvery (int time);}
interface ActionUnit { void seconds(); void minutes(); ... etc.}

补充2:我尝试研究异常,但是无法弄清楚如何在其上进行缝合并使事情保持整洁。

添加3:最好的答案可能是将API更改为以下形式:

someAction.shouldRunEvery(seconds(5));

但在这种情况下,我失去了流动性。

用Java没有很好的方法,但是仍然可以。 您可以在此处找到“安全构建器”样本,该样本在Java泛型类型上运行的Turing Machines生成器 该示例使用Java泛型已完成的事实。 您可以阅读原始文章(仅限俄语Тьюринг-полнота通用типовJava

但是,恐怕对于现实生活来说,语法太糟糕了。

您可以通过使时间单位方法返回一个Action并让getAction()返回一个Action(而非新生对象)(例如,一个“ PreAction”)来强制调用其中一个时间单位方法:

PreAction someAction = getPreAction();

因此,接口如下所示:

interface PreAction{ ActionUnit shouldRunEvery (int time);}
interface ActionUnit { Action seconds(); Action minutes(); ... etc.}

现在,当您忘记时间单位时,您将得到一个不能用作操作的PreAction对象。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM