【问题标题】:Java - Class<? extends Collection>Java - 类<?扩展集合>
【发布时间】:2017-11-23 15:39:53
【问题描述】:

我想在下面的杰克逊反序列化中添加多个类。但我该怎么做?下面是示例代码。

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);

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

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

【问题讨论】:

  • 不确定你在问什么。是关于 List 还是关于 Class ??
  • @ChrisNeve 关于类类型。

标签: java class jackson


【解决方案1】:

java.lang.Class 是一个泛型类,这意味着它可以接受参数,按照以下语法:

Class<T>

其中 T 是由 Class 对象建模的类的类型。以与文档相同的示例,String.class 的类型为Class&lt;String&gt;

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

如果您不知道类型但知道它将扩展给定类,则可以使用以下语法:Class&lt;? extends Superclass&gt;

所以这个语法:

Class<? extends Collection> list;

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

【讨论】:

  • 你能举个例子“声明一个类型是Collection的子类的类”。 ?我还不清楚。
  • 您熟悉 Java 中的继承概念吗?一个类(称为子类或子类)可以使用extends关键字扩展另一个类(称为父类或超类)。
猜你喜欢
  • 2011-04-12
  • 2013-08-25
  • 2014-10-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多