【问题标题】:Generics method usage泛型方法使用
【发布时间】:2016-07-11 15:43:49
【问题描述】:

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

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

【问题讨论】:

  • 它根本不起作用不是一个有用的评论。请解释什么不起作用。
  • @JornVernee 在下面的代码中,我得到:例如“无法解析方法 getPage()”。 TBH,我什至不确定,我实现它甚至接近逻辑上正确的解决方案。
  • 啊,我明白了。但是您没有显示LoginPage.getPage() 的实现。谁的签名与上述方法不兼容。
  • @JornVernee 但我认为上面的泛型方法 getPage() 是我要调用的方法。我只是不确定要传递什么作为参数。
  • @JornVernee 非常感谢,这似乎有效。

标签: java c# selenium generics selenium-webdriver


【解决方案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);

但这也意味着必须处理异常情况。

【讨论】:

    猜你喜欢
    • 2011-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-23
    • 1970-01-01
    • 2012-01-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多