我正在尋找一個Java庫來轉換支持泛型類型的值。也就是說,如果我有Foo<T>
,那麼庫應該支持將String
轉換爲Foo<String>
或Foo<Int>
。java可以處理泛型類型的轉換庫嗎?
當然給了一個類,不能告訴它的通用組件。我的目標是用字符串值填充bean。因此,可以檢查bean的屬性以獲取泛型類型信息。
我正在尋找一個Java庫來轉換支持泛型類型的值。也就是說,如果我有Foo<T>
,那麼庫應該支持將String
轉換爲Foo<String>
或Foo<Int>
。java可以處理泛型類型的轉換庫嗎?
當然給了一個類,不能告訴它的通用組件。我的目標是用字符串值填充bean。因此,可以檢查bean的屬性以獲取泛型類型信息。
這裏是一個溶液的骨架:
public interface Converter {
boolean canConvert(Class<?> sourceCls, Type targetType);
Object convert(Object source, Class<?> sourceClass, Type targetType) throws CannotConvertException;
}
注源類型是Class
,但目標是Type
。如果它是Class
,那麼代碼可以委託給其中一個現有的庫。如果targetType
是ParameterizedType
,那麼您可以從中獲取類型參數(類),然後可以使用標準庫轉換爲它們。
要使用:
Type targetType = field.getGenericType()
Type targetType = method.getGenericParameterTypes()[0]
答案是,沒有這樣的圖書館。
此外,我不認爲有可能創建一個。
的確,沒有一個。但是我創建了自己的實用課程來完成這個任務。不是很困難。訣竅是使用'Type'作爲轉換器的參數,而不是'Class' – IttayD 2012-03-17 04:33:49
如何將庫知道如何創建一個Foo? – jackrabbit 2012-02-16 05:42:05
通常這樣的事情是通過允許註冊聲明他們可以轉換的自定義轉換器來完成的。 – IttayD 2012-02-16 10:25:57
圖書館將沒有安全的方法將結果投射到Foo。轉換器將具有任何被刪除的泛型,因此庫不知道哪個轉換器支持給定的值。 –
jackrabbit
2012-02-17 07:28:14