2017-11-23 11 views
0

下のjackson deserializeに複数のクラスを追加したいと思います。しかし、どうすればいいのですか?以下はサンプルコードです。Java - クラス<? Collection>

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)を追加するにはどうすればよいですか?私はクラスタイプではないので、正しいオブジェクトではなく、以下を試してみます。

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

あなたが何を求めているのかわからない。リストまたはClass <?コレクションを拡張する> ?? –

+0

@ChrisNeveその約<? extends Collection>型を拡張します。 – Sh4m

+0

あなたの質問に答えた場合、受け入れられた回答としてマークしてください。 –

答えて

1

java.lang.Classこの構文に従って、パラメータを取ることができるクラスである。

Class<T> 

Tがクラスオブジェクトによってモデル化されたクラスの型です。ドキュメントの場合と同じ例を使用して、String.classのタイプはClass<String>です。

このように、wildcard syntaxを使用すると、タイプがわからなくてもClassのインスタンスを宣言できます。Class<?>

タイプがわかりませんが、特定のクラスが拡張されることがわかっている場合は、次の構文を使用できます。Class<? extends Superclass>

ので、この構文:

Class<? extends Collection> list; 

は、そのタイプCollectionのサブクラスであるクラスを宣言します。

+0

"あなたの型がCollectionのサブクラスであるクラスを宣言する"という例を挙げることができますか? ?私はまだこれについて明確ではない。 – Sh4m

+0

あなたはJavaの継承概念に精通していますか?クラス(サブクラスまたは子クラスと呼ばれる)は、extendsキーワードを使用して別のクラス(親クラスまたはスーパークラス)を拡張できます。 –

関連する問題