У меня есть код, который нужно разблокировать Jackson TypeReference, чтобы узнать, является ли это коллекцией. На данный момент лучшее, что я могу придумать это:Получить класс от Jackson TypeReference
// 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, не могут быть использованы.
Можете ли вы просто напечатать тип, возвращенный во второй строке класса? (Class) typeRef.getType() – Sashi
Спасибо за ответ. К сожалению, я не могу использовать его, потому что typeRef.getType() возвращает Java 'Type' не класс. – jgm