类 中的循环依赖和 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();
}
这完全取决于您需要实现的目标。
虽然我一直遵循的做法可能不合适。仍在寻找解决我的问题的办法:
我收到 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();
}
这完全取决于您需要实现的目标。