【发布时间】:2010-12-09 23:22:17
【问题描述】:
我有一个带有以下签名的方法:
// Converts a json string to a list of objects
// Assumption: json is an array, and all items in the list are of the same type
public <T> List<T> getListFromJson( String json, Class<T> itemType, List<T> defValue ) {
final ArrayList<T> list = new ArrayList<T>();
for( JsonElement e : parser.parse(json).getAsJsonArray())
list.add( (T) (
Number.class.isAssignableFrom(itemType) ? e.getAsNumber() :
Boolean.class.isAssignableFrom(itemType) ? e.getAsBoolean() :
Character.class.isAssignableFrom(itemType) ? e.getAsCharacter() :
String.class.isAssignableFrom(itemType) ? e.getAsString() :
JsonElement.class.isAssignableFrom(itemType) ? e :
null
)
);
return list;
}
它读取 json 字符串并将其转换为适当类型对象的列表,例如。整数、字符串等
是否有一种可靠的方法可以通过从 List<T> 参数推断它来从方法中删除 Class<T> 参数?例如。有没有办法可以在不丢失功能的情况下将方法签名更改为以下内容?
public <T> List<T> getListFromJson( String json, List<T> defValue ) {
...
}
似乎解决方案需要对 ParameterizedType 进行一些花哨的操作。我查看了以下内容,但要么是我错误地使用了这些方法,要么它们没有按照我的预期进行:
- getTypeArguments() 来自http://www.artima.com/weblogs/viewpost.jsp?thread=208860
- getActualTypeArguments() 来自https://code.google.com/p/aphillips/source/browse/commons-lang/trunk/src/main/java/com/qrmedia/commons/lang/ClassUtils.java
【问题讨论】:
标签: java generics reflection