2015-09-27 274 views
0

比方說,我有一個函數可以處理哪些返回並接受泛型類型。該功能可能看起來像這樣將泛型類型轉換爲對象

public T call(T t) { 
    Log.v(FILE_NAME, "t: " + t.toString()); 
    return null; 
} 

我們如果代碼檢測t.toString()看起來像

{label1=5148.000, label2=8363.000, label3=715.000} 

說,有什麼辦法我可以T轉換爲對象,我們可以很容易地操縱它的內容?通過操縱,我的意思是我們可以輕鬆地將label1,label2和label3的值更改爲其他值,然後返回修改的t。

爲了以防萬一,在上面的示例中,傳遞的參數t的類型爲Map<String,String>

更新:

  1. 是的,我採取Callable<T>
  2. 將來,我可能會提供其他類型的參數,而不僅僅是Map<String,String>
+0

不,你不能,因爲'對象'沒有這樣的字段。要麼你知道你想傳遞的對象的類型爲't'來爲'T'提供一個界限,或者你不能改變它的域。 (你也可以用反射來做一些討厭的東西,但是......不要考慮它) – Tom

+0

@Tom,如果我知道我通過的對象類型爲t?有什麼辦法可以將t轉換爲對象嗎?在這種情況下,對象是Map imin

+0

@imin如果它始終是'Map',爲什麼使用泛型?如果它不總是「Map」,那麼你的論點就會下降。 –

回答

1

我注意到你完全知道你在問什麼。如果你知道t永遠是Map<String, String>類型的,你可以簡單地將它轉換:

Map<String, String> myMap = (Map<String, String>) t; 
+1

這對我來說似乎是一個XY問題。不安全的情況下,它幾乎不能解決任何問題 - 尤其是初學者級別。 –

+0

呃呃呃呃呃呃呃呃...從來不知道這很容易。謝謝 – imin

+1

@imin容易冒險'ClassCastException',是的。 – Tom

1

如果您需要有方法真正通用的,有一些著名的參數一些特殊的處理,你可以有這樣的事情:

if (t instanceof Map) { 
    // do something here 
}