2016-09-19 4 views
0

私はオブジェクトのコレクションを持っている:のJava - ユニバーサルゲッター

public LinkedHashMap<String, Object> objectList; 

を、私はこの方法で文字列値、または整数値を取得したい:

public Object getValue(String key) { 
    if (objectList.get(key) instanceof String) { 
    return ((String) objectList.get(key)); 
    } 
} 

私はこれを使いたい、後ゲッター:

String value = getValue("someKey"); 

しかし、これはうまくいかず、理由はわかりません。 getterはObjectを返しますが、これがStringのインスタンスであれば、Stringにキャストします。

なぜ動作しないのですか?または他の解決策。

ありがとうございました。

+3

メソッドの戻り値の型は 'Object'なので、メソッド内部で何をしても、参照型は' Object'になります。この場合、返された後に 'String'にキャストしなければなりません。 – Zircon

+3

あなたはそれをStringにキャストしたと思いますか?あなたはそうしない。 'public T getValue(String key)'と書くこともできます。すると、キャストする必要はありません。メソッドの実装は 'return(T)objectList.get(key);とします。 –

+0

値が文字列でない場合、何も返さないので、このコードはコンパイルされません。また、より良い名前を選択する必要があります:objectListはMapではなくListを参照する必要があります。 –

答えて

0

は、この方法を試してください。

@SuppressWarnings("unchecked") 
public<T extends Object> T getValue(String key) { 
    return (T) objectList.get(key); 
} 

しかし、そのようなことに非常に注意してください!

+1

''は冗長です。単純に 'public T getValue(String key){...}'と書くことができます。 – Turing85

関連する問題