我收到以下错误:
Bound mismatch: The generic method constructPage(WebDriver, int, Class<T>) of type
Page<T> is not applicable for the arguments (WebDriver, int, Class<HomePage>). The
inferred type HomePage is not a valid substitute for the bounded parameter <T extends
Page<T>>
我正在尝试登录并返回一个HomePage(如果成功),以及一个LoginPage(如果不使用泛型)。
我有一个基类,Page,由SecuredPage扩展,用于登录墙后面的页面。我写了一个通用的辅助方法,可以构造任何类型的页面。LoginPage上的登录方法使用此方法。LoginPage扩展Page,而HomePage扩展SecuredPage。SecuredPage扩展了Page。如果返回LoginPage,则登录方法有效,但是在尝试返回HomePage时出现上述错误。由于HomePage是页面的子类,因为它的父类扩展了Page,所以我对为什么HomePage不是边界参数的有效替代感到困惑<T extends Page<T>>
。
public abstract class Page<T extends Page<T>> extends SlowLoadableComponent<T> {
protected static final <T extends Page<T>> T constructPage(WebDriver driver,
int timeoutInSeconds, java.lang.Class<T> pageClass)
{
Page<T> p = null;
try {
Constructor<T> pageConstructor = pageClass.getConstructor(
WebDriver.class, String.class, Integer.TYPE);
p = pageConstructor.newInstance(driver, driver.getCurrentUrl(),
timeoutInSeconds);
p.get();
} catch(Exception e) {
}
return pageClass.cast(p);
}
}
这是SecuredPage类:
public class SecuredPage extends Page<SecuredPage> {
.....
}
这是主页:
public final class HomePage extends SecuredPage {
......
}
这是LoginPage:
public final class LoginPage extends Page<LoginPage> {
public final HomePage loginWithGoodCredentials(final User user) {
return login(user, HomePage.class);
}
public final LoginPage loginWithBadCredentials(final User user) {
return login(user, LoginPage.class);
}
public final <T extends Page<T>> T login(final User user, final Class<T>
expectedPage) {
enterUsername(user.getUsername());
enterPassword(user.getPassword());
loginButton.click();
return Page.constructPage(getDriver(), getTimeoutInSeconds(),
expectedPage);
}
}
问题是那HomePage
是一个Page<SecuredPage>
而不是一个Page<HomePage>
。该login
方法Page<HomePage>
将从其通用签名返回a
。
您必须将的一般参数HomePage
设为与自身相关,而不是SecuredPage
。这样可以解决编译器错误。保持SecuredPage
通用性,但确保其边界扩展SecuredPage<T>
。然后分配HomePage
本身泛型参数T
在HomePage
。
class SecuredPage<T extends SecuredPage<T>> extends Page<T> {
...
}
class HomePage extends SecuredPage<HomePage> {
...
}
问题出在行collections.sort(acoesProcessar);我得到的信息是: 绑定不匹配:类型集合的泛型方法不适用于参数()。推断的类型不是有界参数
应该如何声明“GenericBo Bo”实例?正确的代码是什么?
下面是一个通用搜索算法的实现: 接口: (方括号=弧形括号) 问题出在哪里?我想不通...对泛型参数T也进行了扩展。
问题内容: 我正在创建一个词解析类,并在运行此命令时始终收到“ < main .Word_Parser实例位于0x1037dd3b0>的绑定方法Word_Parser.sort_word_list ”的错误: 问题答案: 这里没有错误。您正在打印一个函数,这就是函数的外观。 要实际 调用 该函数,必须在其后放置括号。您已经在上面完成了。如果要打印调用函数的结果,只需让函数返回值,然后将打印内容放在
问题内容: 我在项目中创建了一个工厂类,从理论上讲,该类允许我为任何(受支持的)给定类型创建管理器。与管理器进行交互使我可以更改给定类型的某些属性。我面临的问题是,当我尝试为泛型类型创建管理器时,编译器粉碎了我的希望和梦想。 以下代码是我正在使用的简化版本。我尝试创建“ test3Manager”的行将不会编译,并且我试图了解为什么会这样。它下面的线显示了一种“解决方法”,我正试图避免这种情况。