0

特定の形式の文字列を指定されたクラスのオブジェクトに変換できる実装があるとしましょう...

public interface Translator {
    <T> T convertToObject(Class<T> clazz, String msg);
}

次のように使用するクラスがあります。

public <T> T proccessMessage(Class<? extends Response> responseCls,String msg) {
    return (T) translator.convertToObject(responseCls, msg); 
}

キャストせずにこれを行う方法はありますか?私の意図は、 processMessage を制限して Response タイプのみを受け入れることです。応答タイプはマーカー インターフェイスです。ありがとう!

4

2 に答える 2

3

トランスレーターにパラメーターとして渡されるクラスと返される型には同じ型を使用する必要があります。これは、インターフェイスで定義されているためです。

public <T extends Response> T proccessMessage(Class<T> responseCls,String msg) {
    return translator.convertToObject(responseCls, msg); 
}
于 2012-08-09T17:09:41.767 に答える
2

クラス パラメータを のサブクラスに制限しているためResponse、メソッドのシグネチャは次のようになるはずです。

public <T extends Response>
    T proccessMessage(Class<? extends T> responseCls, String msg)
{
    return translator.convertToObject(responseCls, msg);
}

このようにして、適切な戻り値の型を取得し、型キャストなしでコンパイルします。

于 2012-08-09T17:07:41.793 に答える