泛型方法用法

时间:2016-07-11 15:43:50

标签: java c# selenium generics selenium-webdriver

我在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();
}  

根本不起作用。我觉得我缺少基础知识,所以我真的很感激任何帮助或建议。

1 个答案:

答案 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);

但这也意味着必须处理例外情况。