私はインターフェースを持っています:
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
スーパークラスのすべてのサブクラスであるこれらのランディング ページの 1 つを表し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>
が、これは具体的すぎます。