2016-12-07 6 views
3

J'ai une situation où je dois obtenir le nom complet d'une classe que je génère dynamiquement dans Scala. Voici ce que j'ai jusqu'ici. Il est clair que ceci est juste un exemple de jouet, mais je ne sais pas comment obtenir le nom complet de Foo. J'ai essayé de coller une déclaration de paquet dans le code mais cela a jeté une erreur en appelant tb.compile.Comment obtenir le nom complet d'une classe créée dynamiquement dans Scala

Est-ce que quelqu'un sait comment obtenir le nom de classe complet ou (encore mieux) pour spécifier le paquet sous lequel Foo est compilé?

Merci

EDIT

Après avoir utilisé la solution proposée, j'ai pu obtenir le nom de la classe. Cependant, l'étape suivante est l'inscription de cette classe pour prendre quelques actions plus tard. Spécifiquement j'essaye de faire usage du UDTRegistration dans Apache Spark pour manipuler mes propres coutume UserDefinedType s. Cette stratégie fonctionne bien quand je crée manuellement tous les types, cependant, je veux les utiliser pour étendre d'autres types que je ne sais pas. Après avoir lu this, il semble que ce que j'essaie de faire pourrait ne pas être possible en utilisant du code compilé lors de l'exécution en utilisant la réflexion. Peut-être une meilleure solution consiste à utiliser des macros Scala, mais je suis très nouveau dans ce domaine.

Répondre

2

Vous pouvez utiliser define au lieu de compile pour générer nouvelle classe et obtenir son emballage

val cls = tb.define(tb.parse(generatedClass).asInstanceOf[universe.ImplDef]) 
println(cls.fullName) //__wrapper$1$d1de39015284494799acd2875643f78e.Foo 
+0

C'est parfait, mais je compris que ma question était insuffisante. J'ai modifié la question pour refléter mes nouveaux besoins. – Jon