java – 这个循环代码能以某种方式简化吗?
发布时间:2020-12-15 04:30:04 所属栏目:Java 来源:网络整理
导读:我有一个问题……基本上我的代码很丑,我不喜欢它.我想知道是否有办法简化它(我使用 java 8) 我有这些“代码块”遵循这种模式,我在一个方法中有大约5或6个,所以这个方法看起来非常重复和丑陋. 循环都是一样的,只是代码在里面变化. 有什么方法可以简化这个吗?
我有一个问题……基本上我的代码很丑,我不喜欢它.我想知道是否有办法简化它(我使用
java 8)
我有这些“代码块”遵循这种模式,我在一个方法中有大约5或6个,所以这个方法看起来非常重复和丑陋. 循环都是一样的,只是代码在里面变化. 有什么方法可以简化这个吗? 代码块示例 String id = null; for (int i=0; i< NUM_CHECKS; i++) { // BEGIN VARIABLE CODE id = getPrice(); if (id != null) break; // END VARIABLE CODE // sleep between checks if (i < NUM_CHECKS -1) Thread.sleep(DELAY); } 例 String id = null; for (int i=0; i< NUM_CHECKS; i++) { // BEGIN VARIABLE CODE id = getPrice(); if (id != null) break; // END VARIABLE CODE // sleep between checks if (i < NUM_CHECKS -1) Thread.sleep(DELAY); } for (int i=0; i< NUM_CHECKS; i++) { // BEGIN VARIABLE CODE x=x*2; if (x>25) break; // END VARIABLE CODE // sleep between checks if (i < NUM_CHECKS -1) Thread.sleep(DELAY); } etc... a couple more blocks 解决方法
编码抽象以包含所有样板文件怎么样?
class MyLoop { private int numChecks; private int delay; public MyLoop(int numChecks,int delay) {...} public void loopAndSleep(MyTask task) throws InterruptedException { // Update: It is important to set properly the order of the looping conditions,// to stop invoking hasEnded() as soon as i<numChecks==false (Thaks to Simon Eismann). for (int i=0; i<numChecks && !task.hasEnded(); i++) { if (i < numChecks -1) { Thread.sleep(DELAY); } } } } interface MyTask { public boolean hasEnded(); } 因此,您可以通过以下方式替换程序中5-6个地点中的每一个: new MyLoop(NUM_CHECKS,DELAY).loopAndSleep(new MyTask(){...}); 通过正确扩展MyTask,您可以为它们提供特定的状态变量. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |