You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java运行时能否更新方法参数并获取动态更新的字符串值?

Java运行时更新方法参数并重新调用的实现方案

你当前的代码核心问题是:a.equals(b)在调用conditionalWait时就已计算出布尔值并传入方法,后续页面刷新后a的新值无法触发条件的重新计算。Java不支持直接让传入的布尔参数自动更新,但可以通过延迟计算的方式实现需求——让条件判断逻辑在每次循环时重新执行,从而获取最新的a值。

具体实现方案(Java 8+ 推荐用Lambda)

修改B类的conditionalWait方法,将参数从boolean改为Supplier<Boolean>(Java内置的函数式接口,用于延迟提供布尔值):

class B {
    static void conditionalWait(Supplier<Boolean> conditionSupplier) {
        int numTries = 3;
        Actions action = new Actions(driver);
        while (numTries-- != 0) {
            // 每次循环都重新执行条件判断逻辑
            if (conditionSupplier.get()) {
                break;
            } else {
                // 注意:Actions的pause需要调用perform()才会生效
                action.pause(5000).perform();
                driver.navigate().refresh();
            }
        }
    }
}

在A类中调用时,传入Lambda表达式,确保每次判断都重新获取Web元素的最新文本:

class A {
    // 封装获取Web元素文本的逻辑,确保每次调用都拿到最新值
    private String getLatestWebText() {
        // 替换为你实际获取目标Web元素文本的代码
        return yourWebElement.getText();
    }

    String b = "string to compare";

    void executeWait() {
        // Lambda表达式会在每次循环时执行getLatestWebText()和equals判断
        B.conditionalWait(() -> getLatestWebText().equals(b));
    }
}

原理说明

Supplier<Boolean>的get()方法会在每次调用时执行Lambda中的逻辑,也就是说每次循环都会重新从Web元素获取最新文本,再和b做比较,这样就能拿到页面刷新后的最新值了。

兼容旧版本Java的方案(不用Lambda)

如果你的项目不支持Java 8+,可以自定义一个条件接口:

// 自定义条件接口
interface ConditionChecker {
    boolean checkCondition();
}

修改B类的方法:

class B {
    static void conditionalWait(ConditionChecker checker) {
        int numTries = 3;
        Actions action = new Actions(driver);
        while (numTries-- != 0) {
            if (checker.checkCondition()) {
                break;
            } else {
                action.pause(5000).perform();
                driver.navigate().refresh();
            }
        }
    }
}

调用时使用匿名内部类:

class A {
    private String getLatestWebText() {
        return yourWebElement.getText();
    }

    String b = "string to compare";

    void executeWait() {
        B.conditionalWait(new ConditionChecker() {
            @Override
            public boolean checkCondition() {
                return getLatestWebText().equals(b);
            }
        });
    }
}

内容的提问来源于stack exchange,提问作者Dawid Strynowicz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 00:50:04