2010-09-10 8 views
3

En utilisant com.sun.codemodel, je voudrais générer un champ LinkedList générique. Je peux créer un champ brut en utilisant ce code:Utilisation de génériques avec com.sun.codemodel

JDefinedClass masterClass; 
String detailName; 
JDefinedClass detailClass; 
JFieldVar detailField = masterClass.field(JMod.PRIVATE, LinkedList.class, detailName); 

Mais je ne pouvais pas trouver un moyen de créer une LinkedList avec un type générique de detailClass.

+1

vous avez une faute de frappe: 'masterClass' dans un cas et' masterClazz' dans l'autre. (tangente: pourquoi le @ # $ @ # $ est-ce que tout le monde doit utiliser "clazz" avec sa faute d'orthographe intentionnelle, au lieu de quelque chose de moins choquant sur les yeux comme "cl" ou "class1" cela fait partie d'un identifiant comme "masterClass" ou "detailClass" dans votre cas) –

+0

@JasonS http://stackoverflow.com/questions/2529974/why-do-java-programmers-like-to-name-a-variable- clazz – jbranchaud

Répondre

14
JClass detailClass = codeModel.ref(String.class); 
String detailName = "myLinkedListField"; 
JClass rawLLclazz = codeModel.ref(LinkedList.class); 
JClass fieldClazz = rawLLclazz.narrow(detailClass); 
JFieldVar detailField = def.field(JMod.PRIVATE, fieldClazz, detailName); 
+0

Merci, cela a fonctionné. J'ai d'une manière ou d'une autre jeté un coup d'oeil sur le doc pour 'narrow' car il ressemblait à un typecast comme dans' javax.rmi.PortableRemoteObject.narrow'. –

+0

La prochaine fois s'il vous plaît utilisez la marque de code. – CSchulz

Questions connexes