Imagine the following classes
public abstract class BasePage {
// Common functionality for all pages
}
public class LoginPage extends BasePage {
public void login(String username, String password) {
// login logic
}
}
public class HomePage extends BasePage {
public void goToHome() {
// navigate to home logic
}
}
Would be possible to create User.java
and expose somehow some methods from injected dependencies? (Some pseudocode to showcase)
public class User {
@Resource LoginPage loginPage;
@Resource HomePage homePage;
// want to avoid
/*public void login(String username, String password) {
loginPage.login(username, password);
}*/
// somehow expose loginPage.login() - avoiding Java Reflection or verbose solutions
}
After initiate user, I can do user.login()
.
If you use interface
s then you can add default
methods.
public interface BasePage {
// Common functionality for all pages
}
public interface LoginPage extends BasePage {
public default void login(String username, String password) {
// login logic
}
}
public interface HomePage extends BasePage {
public default void goToHome() {
// navigate to home logic
}
}
public class User implements LoginPage, HomePage {
}
2