【发布时间】:2015-02-20 03:26:55
【问题描述】:
我有一些代码需要取消选择 Jackson TypeReference 以确定它是否是 Collection。目前我能想到的最好的是:
// Sample type reference - in reality this is an argument to the method
final TypeReference<List<String>> typeRef = new TypeReference<List<String>>(){};
// Obtain the Java reflection type from the TypeReference
final Type type = typeRef.getType() instanceof ParameterizedType ? ((ParameterizedType)typeRef.getType()).getRawType() : typeRef.getType();
// Obtain the name of the class (or interface)
final String typeName = type.toString().replace("class ", "").replace("interface ", "");
// And find out if it is a Collection
final boolean isCollection = Collection.class.isAssignableFrom(Class.forName(typeName));
但我希望有一种方法可以在没有字符串操作的情况下做到这一点。有没有更好的方法从 Java Type 到 Class,或者直接从 TypeReference 或 Type 检查可分配性?
这需要在 Android 上运行,因此 Java 8 中添加的任何功能都无法使用。
【问题讨论】:
-
你能把第二行返回的类型转换成一个类吗? (类)typeRef.getType()
-
感谢您的回复。不幸的是,我无法转换它,因为 typeRef.getType() 返回 Java
Type而不是类。
标签: java reflection jackson