我在C#中有这段代码:
private static T GetPage<T>() where T : new()
{
var page = new T();
PageFactory.InitElements(Browser.Driver, page);
return page;
}
public static AboutPage About
{
get { return GetPage<AboutPage>(); }
}
我试图在Java中实现这一点,因为我非常喜欢这个概念,但我对泛型(尤其是c#)并不擅长。那么,这是我的代码:
private static <T> T getPage(Class<? extends T> cls) throws Exception{
T page = cls.newInstance();
PageFactory.initElements(driver, page);
return page;
}
public static LoginPage Login() {
return LoginPage.getPage();
}
根本不起作用。我觉得我缺少基础知识,所以我真的很感激任何帮助或建议。
答案 0 :(得分:1)
请改为尝试:
private static <T> T getPage(Supplier<? extends T> supp) {
T page = supp.get();
PageFactory.initElements(driver, page);
return page;
}
public static LoginPage Login() {
return getPage(LoginPage::new); // Passing the default constructor
}
在这里,我将T
的实例化从Class
切换为Supplier
的实例化,因为它不会抛出异常。
如果您没有Java 8,则必须使用您的代码,并调用如下:
getPage(LoginPage.class);
但这也意味着必须处理例外情况。