加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

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,您可以为它们提供特定的状态变量.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读