java - 如何在java方法中使用动态代码?

标签 java dynamic methods redundancy

我有几乎多余的java方法。这些方法的主体始终相同。只有一两个java表达式(java代码行)不同。我想对这些几乎冗余的方法进行代码重构,但我正在寻找实现此目的的最佳方法。由于动态代码行,这并不容易。

以下是具有相同主体但包含动态 Java 代码的三个方法:

public static final boolean doSomething1() {
    Date date = new Date();
    long currentTime = date.getTime();
    long maxTime = currentTime + (TIMEOUT * 1000);

    while (currentTime < maxTime) { 
        try {
            //START OF MY DYNAMIC CODE
            //example 1
            for (WebElement element : list) {
                if (element.isDisplayed()) {
                    element.click();
                    return true;
                }                   
            }
            //END OF MY DYNAMIC CODE
        }
        catch (Exception e) {
            LOG.error("exception");
        }
        currentTime = new Date().getTime();
    }

    return false;
}

public static final boolean doSomething2() {
    Date date = new Date();
    long currentTime = date.getTime();
    long maxTime = currentTime + (TIMEOUT * 1000);

    while (currentTime < maxTime) { 
        try {
            //START OF MY DYNAMIC CODE
            //example 2
            for (WebElement webElement : webElementList) {   
                WebElement parent = getParentElement(webElement);
            }
            return true;
            //END OF MY DYNAMIC CODE
        }
        catch (Exception e) {
            LOG.error("exception");
        }
        currentTime = new Date().getTime();
    }

    return false;
}

public static final boolean doSomething3() {
    Date date = new Date();
    long currentTime = date.getTime();
    long maxTime = currentTime + (TIMEOUT * 1000);

    while (currentTime < maxTime) { 
        try {
            //START OF MY DYNAMIC CODE
            //example 3
            for (WebElement element : list) {
                if (element.isDisplayed() && element.getText().equalsIgnoreCase(size))
                    return true;
            }
            //END OF MY DYNAMIC CODE
        }
        catch (Exception e) {
            LOG.error("exception");
        }
        currentTime = new Date().getTime();
    }

    return false;
}       

那么,如何编写一种可以设置动态代码行的方法呢?

最佳答案

您可以使用Strategy Pattern .

使用 BooleanSupplier 的示例作为策略:

private static boolean doSomethingHelper(BooleanSupplier checker) { 
    Date date = new Date();
    long currentTime = date.getTime();
    long maxTime = currentTime + (TIMEOUT * 1000);

    while (currentTime < maxTime) { 
        try {
            if (checker.getAsBoolean())
                return true;
        }
        catch (Exception e) {
            LOG.error("exception");
        }
        currentTime = new Date().getTime();
    }

    return false;
}

public static boolean doSomething1() {
    return doSomethingHelper(() -> true);
}

public static boolean doSomething2() {
    return doSomethingHelper(() -> false);
}

public static boolean doSomething3() {
    return doSomethingHelper(() -> {
        System.out.println("test");
        return true;
    });
}

关于java - 如何在java方法中使用动态代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38695161/

相关文章:

java - GWT - JSONizing 类产生奇怪的结果

java - 向导应用程序要遵循的设计或类/组件层次结构

javascript - 单击元素后创建 Google Map v3

php - 使用动态 URL 到 'activate' 额外的 CSS

java - 有什么办法可以结合这两种方法吗?

java - 调用方法时出现问题(扫雷)

java - 如何使用jsoup提取图像url

java - JAVA Swing 中具有窗口焦点的 JTable Cell

c - 这个数组是静态的还是动态的?

java - 如何在方法中为变量设置值并在主方法中打印出来?