【发布时间】:2020-11-19 08:53:16
【问题描述】:
我正在进行 java selenium 测试,我正在尝试设置一个流畅/方法链接的设计代码:
我有一个通用按钮类,它允许从一个页面类导航到另一个。按钮是我的页面类的属性。按钮类中的方法应该能够返回在按钮实例化时定义的通用页面类(您所在的页面、按钮指向的页面等)。 但是如果不破坏主类中的流畅设计,我不知道该怎么做:
Button.java
public class Button<T, U> {
public T observe() {
return new T(); // Does not work
}
public U click() {
return new U(); // Does not work
}
}
FirstPage.java
public class FirstPage {
public Button<FirstPage, SecondPage> buttonOnFirstPage = new Button<>();
}
SecondPage.java
public class SecondPage {
public Button<SecondPage, AnotherPage> buttonOnSecondPage = new Button<>();
}
最后,我希望能够在不强制转换或提及类型的情况下做些什么,以便从自动完成和其他花哨的 IDE 东西中受益:
BrowsingTest.java
public class BrowsingTest {
public static void main(String[] args) {
new FirstPage()
.buttonOnFirstPage.observe()
.buttonOnFirstPage.click()
.buttonOnSecondPage.observe()
.buttonOnSecondPage.click(); //etc.
}
}
关于如何构建该按钮类的任何想法?非常感谢!
【问题讨论】:
-
令人讨厌的是,这已关闭以重定向到十年前的一些难以辨认的答案,这无疑会阻止您尝试。在您的情况下,这完全可行。提示:为每个按钮(
new Button<>(){})创建一个匿名子类以锁定泛型,在构造函数中使用 GuavaTypeToken轻松提取Class<T>
标签: java generics return-value method-chaining fluent-interface