views:

66

answers:

3

I'm trying to derive the class instance of a groovy class from the name of string.

For example, I'd like to do some code along these lines:

        def domainName

        domainName = "Patient"

        // but following line doesn't work, domainName is a String
        def domainInstance = domainName.get(1); 
A: 

Well,

  1. Try to implement your code using packages

  2. Try this code: I don't know if it will work ok?

    def domainInstance = Class.forName("Patient").newInstance()

Kico Lobo
+1  A: 

This will work:

Class.forName("Patient", false, Thread.currentThread().contextClassLoader).get(1)

Jean Barmash
what I was looking for, but the next one covers null. Thanks anyway!
Jack BeNimble
+4  A: 

The Grails way would be to use GrailsApplication#getArtefact. e.g.,

def domainInstance = grailsApplication.getArtefact("Domain",domainName)?.
        getClazz()?.get(1)

The advantage of doing it this way as opposed to Class.forName is that if there is no domain class with that name, getArtefact just returns null instead of throwing an exception.

noah