Java - Class <! - ? extends Collection - >

时间:2017-11-23 15:39:53

标签: java class jackson

我想在下面的jackson deserialize中添加多个类。但是我该怎么做?下面是示例代码。

XmlMapper mapper = new XmlMapper();
JaxbAnnotationModule module = new JaxbAnnotationModule();
mapper.registerModule(module);
AnnotationIntrospector introspector = new JaxbAnnotationIntrospector(mapper.getTypeFactory());
mapper.setAnnotationIntrospector(introspector);
TypeFactory typeFactory = mapper.getTypeFactory();
Class<? extends Collection> list;
MapType mapType = typeFactory.constructRawCollectionType(list);
File is = new File("myXMLFile.xml");
ArtworkContentMessageType je = mapper.readValue(is,mapType);
下面的部分令我困惑。如何将类添加到列表中?

Class<? extends Collection> list;
MapType mapType = typeFactory.constructRawCollectionType(list);

我如何添加multple类(例如:Body.class和P.class)。我尝试下面,它不是正确的对象,因为它不是类类型。

List<Class> clazz = new ArrayList<>();
clazz.add(ArtworkContentMessageType.class);
clazz.add(Body.class);
clazz.add(P.class);
MapType mapType = typeFactory.constructRawCollectionType(clazz);

1 个答案:

答案 0 :(得分:1)

java.lang.Class是一个可以接受参数的类,按照以下语法:

Class<T>

其中T是由Class对象建模的类的类型。采用与文档中相同的示例,String.class的类型为Class<String>

因此,通过使用wildcard syntax,您可以在不知道其类型的情况下声明Class的实例:Class<?>

如果您不知道该类型,但您知道它会扩展给定的类,则可以使用以下语法:Class<? extends Superclass>

所以这个语法:

Class<? extends Collection> list;

声明一个类,其类型是Collection的子类。