我有一个界面:
public interface ILoginResult<T> {
public T get();
}
我有一个LoginPage
对象:
public class LoginPage<T> {
...
public ILoginResult<T> login(...) {
...
}
}
我也有一些登陆页面对象,可能login
导致的地方。他们实现了接口:
public class Page1 extends PageBase implements ILoginResult<Page1> {
...
}
这些是该login
方法必须返回的对象类型。返回的对象类型应与LoginPage
创建时指定的类型相匹配。
我不确定如何从类型T
转到ILoginResult<T>
. 我可以创建实现特定类型的对象的实例T
,但这不满足返回类型。我是在尝试做一些没有通用标准实现方法的事情,还是我只是错过了一些明显的事情?
附加数据:
这是一些测试自动化。LoginPage 是一个页面对象,它可以根据各种设置登录到多个不同页面之一。T
表示这些登录页面之一,它们都是超类的子PageBase
类。
在我的旧代码中,该login
方法返回PageBase
. 我会登录到一个页面 - 比如说Page1
- 因此:
LoginPage loginPage = new LoginPage(...);
Page1 page1 = (Page1) loginPage.login(parameters);
我被指示引入更多类型安全性并避免使用上述接口进行强制转换。大概代码看起来像:
LoginPage<Page1> loginPage = new LoginPage<Page1>(...);
Page1 page1 = loginPage.login(parameters);
我的困难在于创建和返回满足返回类型的这些对象的实例ILoginresult<T>
。我可以创建这样Page1
的实例 implement ILoginResult<Page1>
,但这太具体了。