类 中的循环依赖和 StackOverflow 错误

Circular Dependency in classes and StackOverflow Error

虽然我一直遵循的做法可能不合适。仍在寻找解决我的问题的办法:

我收到 WhosebugError ::

java.lang.WhosebugError
    at com.my.package.pages.Selendroid.HomePage.<init>(HomePage.java:11)
    at com.my.package.pages.Selendroid.LoginPage.<init>(LoginPage.java:14)
    at com.my.package.pages.Selendroid.HomePage.<init>(HomePage.java:11)

AppiumBasePage ::

public class AppiumBasePage {
    protected AppiumDriver driver;

HomePage ::

public class HomePage extends AppiumBasePage {
    LoginPage loginPage = new LoginPage();

LoginPage ::

public class LoginPage extends AppiumBasePage {
    HomePage homePage = new HomePage();

问:如何解决这种循环依赖以及我到底做错了什么?详细点就好了。

编辑:我想要实现的细节是 - 我将在这两个 类 中使用很多相互关联的方法。而不是在我想多次使用它的函数内部创建一个对象,我想在另一页上有一个单独的对象来使用前者中定义的方法。

您的问题是,当您创建 HomePage 时,它会创建一个新的 LoginPage,而每当您创建 LoginPage 时,您都会创建一个 HomePage。这显然会导致一个永无止境(直到堆栈溢出)的循环。

为了解决问题,请不要在构建过程中创建页面。为他们制作setter

private static class AppiumBasePage {

    public AppiumBasePage() {
    }
}

public class HomePage extends AppiumBasePage {

    LoginPage loginPage;

    public void setLoginPage(LoginPage loginPage) {
        this.loginPage = loginPage;
    }

}

public class LoginPage extends AppiumBasePage {

    HomePage homePage;

    public void setHomePage(HomePage homePage) {
        this.homePage = homePage;
    }


}

public void test() {
    LoginPage login = new LoginPage();
    HomePage home = new HomePage();
    login.setHomePage(home);
    home.setLoginPage(login);
}

或者,您可以通过引入新的 class 来保持这种依赖关系,从而完全消除这种依赖关系。

public class HomePage extends AppiumBasePage {

}

public class LoginPage extends AppiumBasePage {
}

class Pages {

    AppiumBasePage login = new LoginPage();
    AppiumBasePage home = new HomePage();
}

这完全取决于您需要实现的目标。