泛型方法用法

本文关键字:用法 泛型方法 | 更新日期: 2023-09-27 17:56:36

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

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

泛型方法用法

试试这个:

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

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