1

それぞれが異なる API と対話するために、いくつかの異なるクラスを作成しています。継承元のクラスごとにインターフェイスを作成しましたが、インターフェイスのメソッドの 1 つは、実装されている API に応じていくつかの異なるデータ型を受け取ることができます。そのメソッドが取り込む未知の型を定義することは可能ですか?

今のところ、それを として宣言しObject、実装内でキャストしているだけです。

インターフェース:

public interface UDSession {

    public void authenticate(String user) throws UDException;

    public void linkAccount(Object authInfo) throws UDException;

}

メソッドの実装 (署名と最初の行のみ):

ドロップボックス:

    public void linkAccount(Object authInfo) throws UDException {
        WebAuthSession.WebAuthInfo info = (WebAuthSession.WebAuthInfo) authInfo;
}

グーグル:

   public void linkAccount(Object authInfo) throws UDException {
                GoogleOAuthParameters info = (GoogleOAuthParameters) authInfo;
        }

また、インターフェイスで次のようClass<?>に定義し、メソッド シグネチャの実装で次のように定義しようとしましたClass<WebAuthSession.WebAuthInfo>。しかし、これはうまくいきませんでした。

Object型パラメーターを使用するよりも、これを行うためのより良い方法が必要です。何か案は?

ありがとう。

4

1 に答える 1

3

クラスをインスタンス化する方法に応じて、次のことを試すことができます。

public interface UDSession<T> {

    public void authenticate(String user) throws UDException;

    public void linkAccount(T authInfo) throws UDException;

}
于 2012-07-17T05:28:22.803 に答える