如何将方法 return 类型设为 Callable<Boolean>

How to make a method return type as Callable<Boolean>

我的方法之一:

public void pageIsReady()

实现是

Awaitility.await().atMost(5, TimeUnit.SECONDS).until(isPageLoaded());

这里,isPageLoaded()方法是returns的布尔值,但是我希望它是return一个Callable的布尔值,因为until()方法中Awaitility 期望 Callable<Boolean>.

请帮我制作方法isPageLoaded() return Callable<Boolean>

下面是isPageLoaded()方法的实现:

protected Boolean isPageLoaded() {
    String jsQuery = "function pageLoaded() "
            + "{var loadingStatus=(document.readyState=='complete');"
            + "return loadingStatus;};"
            + "return pageLoaded()";

    boolean isSuccess = false;
    try {
        isSuccess = (Boolean) evaluateJavascript(jsQuery);
    } catch (Exception exp) {
        exp.printStackTrace();
    }
    return isSuccess;
}

只需按如下方式定义您的 isPageLoaded() 方法:

protected Callable<Boolean> isPageLoaded() {
    //code..
}

最简单的方法是使用方法引用 Callable<Boolean> isPageLoaded = this::isPageLoaded,或将其显式用作 lambda Callable<Boolean> isPageLoaded = () -> isPageLoaded();

这看起来像

Awaitility.await().atMost(5, TimeUnit.SECONDS).until(this::isPageLoaded);
Awaitility.await().atMost(5, TimeUnit.SECONDS).until(() -> isPageLoaded());

另一种方法是将您的方法定义为返回 Callable<Boolean>,然后使用 lambda 语法 () -> {} 编写可调用对象。

protected Callable<Boolean> isPageLoaded() {
    return () -> {
        String jsQuery = "function pageLoaded() "
            + "{var loadingStatus=(document.readyState=='complete');"
            + "return loadingStatus;};"
            + "return pageLoaded()";

        boolean isSuccess = false;
        try {
            isSuccess = (Boolean) evaluateJavascript(jsQuery);
        } catch (Exception exp) {
            exp.printStackTrace();
        }
        return isSuccess;
    };
}

Lambda 表达式和方法引用可以成为非常强大的工具。