2010-10-16 4 views
4

J'essaie d'appeler un constructeur pour un objet de collection personnalisé. Cet objet personnalisé accepte un paramètre de type Class.Passage Classe <?> paramètre utilisant Rhino

En java, cela se fait comme ceci:

ICollection col = new PersistentCollection(ContentX.class); 

Ceci est ma première plongée dans le rhinocéros, et je n'ai pas été en mesure de comprendre tout à fait comment passer ce paramètre. J'ai compris que "classe" est un mot réservé et donc non utilisable.

Je pensais que je pouvais obtenir la classe de Class.forName comme ceci:

importPackage(Packages.something.collections); 
importPackage(Packages.something.content4); 
var col = new PersistentCollection(Class.forName(ContentX)); 

Mais il jette juste ClassNotFoundException - avec le chemin complet something.content4.ContentX! Donc, évidemment, il a trouvé la classe ou il n'aurait pas connu le chemin.

Est-ce que je fais mal? Malheureusement, je ne suis pas en mesure de changer la bibliothèque Java en ce moment, j'ai besoin de réparer les données sans un nouveau déploiement. Googling pour la classe javascript donne des problèmes DOM/CSS.

+0

Comment venir Javascript dans le mix? –

+0

QPekka il utilise Rhino (devinant ici) de JDK 6 - il est emballé avec la version et étonnamment facile à utiliser – Pointy

+1

@ Jörgen Je viens d'essayer 'var c = java.lang.Class.forName (" java.util.HashMap ")' de "jrunscript" et cela a très bien fonctionné. – Pointy

Répondre

2

Je pense que vous devez simplement faire:

var col = new PersistentCollection(ContentX); 

Ou, si votre nom de classe est une chaîne:

var col = new PersistentCollection(
     java.lang.Class.forName('something.content4.ContentX')); 
+0

Haha, vous avez en effet raison avec ceci: var col = new PersistentCollection (ContentX); Parfois je m'émerveille moi même ... à quel point je suis bête le week-end. –

Questions connexes