5

次のコードがあります。

protected <T> T getValueForKey(String key) {

    T value = null;

    // currentStats is just a Bundle
    if (currentStats.containsKey(key)) {
        return value;
    }
    return value;
}

制限を設定するにはどうすればよいですか? つまり、T は、たとえば、String、int、または double になります。これは可能ですか?

PS

使いたくない

protected <T extends String> T getValueForKey(String key) {

}

私は文字列だけを持ちたくないので..

4

5 に答える 5

6

戻り値をオーバーロードすることはできないので、別のアクセサーメソッドを使用することをお勧めします。

protected int     getIntForKey(String key);
protected double  getDoubleForKey(String key);
protected String  getStringForKey(String key);
于 2013-01-07T17:08:33.633 に答える
2

ジェネリック型を String、Integer、Double のみに制限する方法はないと思いますが、<T extends Comparable>As String、Integer、Double をすべて Comparable に実装することはできます。しかし、他の多くのクラスも java.util.Date のように Comparable を実装しています。

于 2013-01-07T17:05:26.007 に答える
1
protected <T extends Object> T getValueForKey(String key);

とにかく「文字列または整数またはダブル」などを返すことができるかどうかはわかりません。

返されるオブジェクトのクラス名をチェックし、返されるオブジェクトが目的のタイプの1つでない場合は例外をスローするために、いつでもロジックを追加できます。

于 2013-01-07T17:07:36.470 に答える
0

これを行う直接的な方法はありません。
タイプに使用されるクラスはT 、制限されるために共通のものを持っている必要があります。つまり、Tすべてのクラスは何らかのインターフェースを実装する必要があります-これがInterfaceName

class ClassName が を含むクラスである場合、次のようprotected T getValueForKey(String key)にクラスを宣言する必要があります。ClassName

class ClassName<T extends InterfaceName>

非常によく似た質問が、次の URL で既に尋ねられています。

ジェネリック クラスで "T" として許可される型を制限するにはどうすればよいですか?

于 2013-01-07T17:12:04.010 に答える
0

@anfy2002us の反響コメント -- 発信者が、指定されたキーに関連付けられた値の目的の型を知っていても問題ない場合は、これはどうですか?

protected <T> T getValueForKey(String key, Class<T> type) {
    return currentStats.containsKey(key) ? type.cast(currentStats.get(key)) : null;
}
于 2013-01-07T20:10:49.480 に答える