首页 > 解决方案 > Java立即调用我在数组中初始化的方法

问题描述

这是示例代码或我尝试初始化的方法:

    WebDriver launch_browser1()
    {
        // initialize driver stuff
        return driver;
    }

    WebDriver launch_browser2()
    {
        // initialize driver stuff
        return driver;
    }

这是我的初始化代码

WebDriver test_browsers [] = {launch_browser1(), launch_browser2()};

当我点击运行时,它会立即调用我初始化的浏览器

我目前的解决方法是

public static String test_browsers[] = {"browser1", "browser2"};
for (int i = 0; i < test_browsers.length; i++) 
{
    if (i == 0)
    {
        driver = launch_browser1();
    }
    else if (i == 1)
    {
        driver = launch_browser2();
    }
}

我的目标是一次启动一个浏览器。解决方法工作得很好,但我需要帮助优化我当前的代码。我不确定我在哪里初始化出错了,但任何帮助将不胜感激

标签: javaeclipsewebdriver

解决方案


供应商

Supplier使用Java 中的cab 可以解决此问题

  1. 创建供应商并将实际的对象创建包装在供应商内部
  2. Supplier.get()将调用 lambda
import java.util.function.Supplier;

public class SupplierTest {

    public static class WebDriver {
        public WebDriver() {
            System.out.println("Initialized");
        }

        public void print() {
            System.out.println("Running " + System.currentTimeMillis());
        }
    }


    static WebDriver launch_browser1() {
        // initialize driver stuff
        return new WebDriver();
    }

    static WebDriver launch_browser2() {
        // initialize driver stuff
        return new WebDriver();
    }

    public static void main(String[] args) {
        Supplier<WebDriver> test_browsers [] = new Supplier[]{ () -> launch_browser1(), () -> launch_browser2()};
        for (Supplier<WebDriver> a : test_browsers) {
            System.out.println("Inside for loop");
            a.get().print();
        }
    }
}

推荐阅读