2015-02-11 50 views
0

我收到一個Map<String, Object>從調用API到我的代碼之外。 此映射可以包含各種類型的值(字符串,數字,日期,自定義對象...)。等效於Java中Groovy的DefaultGroovyMethods#asType(在第三方jar中)

編輯: 對於一些非理性的原因,這些值有時存儲爲映射中的適當類型,但有時使用字符串表示形式。 (因此,一個整數可以作爲Java整型或字符串被發現。)

爲了避免這樣的代碼:

Long numericValue = null; 
Object val = map.get(key); 
if(val!=null) { 
numericValue = Long.parseLong(val.toString(); 
} 

我想用類似Groovy的DefaultGroovyMethods#asType它們執行的東西檢查和自省將數據轉換爲目標類型。

是否有任何提供這種強大轉換的知名輕量級庫(jakarta commons,Guava,...)?

+0

難道你不能用Groovy的方法作爲lib嗎? – Will 2015-02-11 15:54:29

+0

爲什麼不。但它將是一個小功能的巨大依賴......我必須將groovy代碼遷移到一個沒有groovy的java項目,這是用Java編寫的類。 – Guillaume 2015-02-11 17:16:41

+0

我想是的。即使它被分成模塊,groovy的核心也相當大,大約2MB。 – Will 2015-02-11 17:37:48

回答

-1

我不認爲有類似的功能,因爲Groovy是動態語言,但Java是靜態的。因此在Groovy中使用asType()方法或as運算符是合理的。

在Java中,每個類似的類型轉換都需要使用大量的反射。

Groovy使用一些有用的函數構建。在Java中,您應該最可能使用助手方法和您自己的自定義轉換。

+0

我知道什麼是常規和什麼是java ...我知道asType方法使用反射來獲得類型......但是這不是不可能在Java中實現,我問如果有人知道這樣的實現。 – Guillaume 2015-02-11 12:26:03