0

以下の例のように、オブジェクト O の型を推測する方法はありますか (これはコンパイルされません)。

public interface LogUpdateListener<S extends LogSet<O>> {
    void logUpdated(O object);
}

したがって、上記の例ではwhereLogSetを一般的に使用しています。の場合、メソッドの型として使用する の型を推測することは可能ですか?OO extends LogObjectS extends LogSetSOlogUpdated

これを明示的に行う唯一の方法は次のとおりです。

public interface LogUpdateListener<O extends LogObject, S extends LogSet<O>>

私の質問が理にかなっていることを願っています。

4

1 に答える 1

2

あなたの質問を理解できたかどうかわかりませんが、もしあなたが尋ねているのなら:

  1. どうやって宣言するのLogUpdateListener...
  2. 「の型」Sを拡張する型の、...LogSetO
  3. タイプはどこにO拡張されLogObjectますか?

次に、はい、次のように宣言します。

public interface LogUpdateListener<O extends LogObject, S extends LogSet<O>>

これはO、型パラメーターの場合 (あなたが言っていると思います)、型パラメーター セクションで宣言する必要があるためです。Oのサブタイプにもバインドする場合はLogObject、そのバインドを型パラメーター宣言と共に追加する必要があります。

ただし、次の点に注意してください。

  • ( )の適切なサブタイプPPある型の場合OP < O
  • LogSet<P> のサブタイプではありませんLogSet<O>

これは、たとえば、他のオブジェクトとの間で (この順序で) コピーする場合、メソッド宣言でLogSet<? extends O>またはのワイルドカード パラメータ化された型を使用する必要があることを意味します。LogSet<? super O>LogSet

于 2015-02-21T17:54:35.333 に答える