otrzymuję następujący błąd:Związane błąd niedopasowania i java rodzajowy metoda
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>>
Próbuję zrobić login i powrócić do strony głównej, jeśli się powiedzie i LoginPage jeśli nie używając rodzajowych.
Mam klasę podstawową, stronę rozszerzoną o SecuredPage dla stron za ścianą logowania. Napisałem ogólną metodę pomocniczą, która tworzyłaby strony dowolnego typu. Ta metoda jest używana przez metodę logowania na stronie logowania. LoginPage extends Page i HomePage rozszerza SecuredPage. SecuredPage rozszerza stronę. Metoda logowania działa, gdy strona Login jest zwracana, ale otrzymuję powyższy błąd, próbując zwrócić stronę główną. Ponieważ HomePage jest podklasą strony, ponieważ jej klasa nadrzędna rozszerza stronę, nie rozumiem, dlaczego HomePage nie jest poprawnym substytutem ograniczonego parametru <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);
}
}
Jest to klasa SecuredPage:
public class SecuredPage extends Page<SecuredPage> {
.....
}
A to Homepage:
public final class HomePage extends SecuredPage {
......
}
To 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);
}
}
oprawionego klasie 'stronę>' prawie nigdy nie jest przydatny w Javie –
newacct