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
相关产品推荐
相关产品推荐

