Tôi nhận được lỗi sau:ràng buộc lỗi không phù hợp và java phương pháp chung
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>>
Tôi cố gắng để làm một tên đăng nhập và trả về một trang chủ, nếu thành công và một LoginPage nếu không sử dụng Generics.
Tôi có một lớp cơ sở, Trang được mở rộng bởi SecuredPage cho các trang phía sau tường đăng nhập. Tôi đã viết một phương thức trợ giúp chung để xây dựng các trang thuộc bất kỳ loại nào. Phương thức này được sử dụng bởi phương thức đăng nhập trên LoginPage. LoginPage mở rộng Page và HomePage mở rộng SecuredPage. SecuredPage mở rộng trang. Phương thức đăng nhập hoạt động nếu LoginPage được trả về, nhưng tôi nhận được lỗi trên khi cố gắng trả về một HomePage. Vì HomePage là một lớp con của trang vì lớp cha của nó mở rộng Trang, tôi nhầm lẫn là tại sao HomePage không phải là một thay thế hợp lệ cho tham số bị ràng buộc <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);
}
}
Đây là lớp SecuredPage:
public class SecuredPage extends Page<SecuredPage> {
.....
}
Và đây là HomePage:
public final class HomePage extends SecuredPage {
......
}
Đây là 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);
}
}
một ràng buộc lớp 'trang>' là gần như không bao giờ hữu ích trong Java –
newacct