我收到以下错误:
Bound mismatch: The generic method constructPage(WebDriver, int, Class) of type
Page is not applicable for the arguments (WebDriver, int, Class). The
inferred type HomePage is not a valid substitute for the bounded parameter
Page>
我正在尝试登录并返回主页,如果成功,则返回LoginPage,如果不使用泛型.
我有一个基类,Page由SecuredPage扩展,用于登录墙后面的页面.我写了一个通用的辅助方法来构造任何类型的页面. LoginPage上的登录方法使用此方法. LoginPage扩展页面和HomePage扩展SecuredPage. SecuredPage扩展了Page.如果返回LoginPage,则登录方法有效,但我在尝试返回HomePage时遇到上述错误.由于HomePage是页面的子类,因为它的父类扩展了Page,所以我很困惑为什么HomePage不是有界参数< T extends Page< T>>的有效替代品.
public abstract class Page> extends SlowLoadableComponent {
protected static final > T constructPage(WebDriver driver,
int timeoutInSeconds, java.lang.Class pageClass)
{
Page p = null;
try {
Constructor 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 {
.....
}
这是主页:
public final class HomePage extends SecuredPage {
......
}
这是LoginPage:
public final class LoginPage extends Page {
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 login(final User user, final Class
expectedPage) {
enterUsername(user.getUsername());
enterPassword(user.getPassword());
loginButton.click();
return Page.constructPage(getDriver(), getTimeoutInSeconds(),
expectedPage);
}
}