Grails 如何从类名中获取类

Grails 如何从类名中获取类,grails,groovy,Grails,Groovy,我有一个字符串Person,它是类Person的名称。 我能从那根绳子上找到班上的人吗?。我需要这个类来调用if的静态方法 换句话说:Class.getName是否有一个相反的值 如果这根本不起作用,请告诉我。这也是一个答案。是的,有一个方法:Class.forName应该可以完成您需要的工作。请注意,您必须随包传递完全限定的类名。请参阅。是的,有一个方法:Class.forName应该完成您需要的工作。请注意,您必须随包传递完全限定的类名。请参阅。类。forName适用于包括包在内的全名 如果

我有一个字符串Person,它是类Person的名称。 我能从那根绳子上找到班上的人吗?。我需要这个类来调用if的静态方法

换句话说:Class.getName是否有一个相反的值

如果这根本不起作用,请告诉我。这也是一个答案。

是的,有一个方法:Class.forName应该可以完成您需要的工作。请注意,您必须随包传递完全限定的类名。请参阅。

是的,有一个方法:Class.forName应该完成您需要的工作。请注意,您必须随包传递完全限定的类名。请参阅。

类。forName适用于包括包在内的全名

如果您只有一个没有包的裸名称,那么没有通用的方法,但在Grails域类或其他Grails人工制品的特定情况下,您可以使用。

class.forName将适用于包含包的全名


如果您只有一个没有包的裸名称,那么就没有通用的方法,但是在Grails域类或其他Grails制品的特定情况下,您可以使用class.forName来获取类。下面的代码可能对您有所帮助

String type ="com.yourPackage.Person";
Class<Person> m = (Class<Person>) Class.forName(type);

您可以使用class.forName获取类。下面的代码可能对您有所帮助

String type ="com.yourPackage.Person";
Class<Person> m = (Class<Person>) Class.forName(type);
如果知道要调用的方法的名称,可以执行以下操作

def className = 'Person'
def clz = Class.forName(className)
clz.someMethod()
def className = 'Person'
def methodName = 'someMethod'
def clz = Class.forName(className)
clz."$methodName"()
如果方法名是动态的,您可以这样做

def className = 'Person'
def clz = Class.forName(className)
clz.someMethod()
def className = 'Person'
def methodName = 'someMethod'
def clz = Class.forName(className)
clz."$methodName"()
如果知道要调用的方法的名称,可以执行以下操作

def className = 'Person'
def clz = Class.forName(className)
clz.someMethod()
def className = 'Person'
def methodName = 'someMethod'
def clz = Class.forName(className)
clz."$methodName"()
如果方法名是动态的,您可以这样做

def className = 'Person'
def clz = Class.forName(className)
clz.someMethod()
def className = 'Person'
def methodName = 'someMethod'
def clz = Class.forName(className)
clz."$methodName"()

为什么你建议他调用newInstance?而且,对newInstance返回值强制转换的对象没有意义。destClass引用是用对象声明的。可以将任何内容指定给对象引用。在这种情况下,演员们什么都不做。您命名变量destClass的事实让我想知道,您是否认为newInstance返回java.lang.Class对象,而不是该类的实例。您为什么建议他调用newInstance?此外,对newInstance返回值强制转换的对象没有意义。destClass引用是用对象声明的。可以将任何内容指定给对象引用。在这种情况下,演员们什么都不做。您命名变量destClass的事实让我怀疑您是否认为newInstance返回java.lang.Class对象,而不是该类的实例。我在agrails环境中工作,但是我如何才能获得grailsApplication?我通过以下方式获得grailsApplication,使它现在可以像我想要的那样通用:'def grailsApplication=new Historie.domainClass.grailsApplication'@user3647093控制器自动获得它,服务和域可以使用自动连接类级别的def grailsApplication,在其他任何地方都可以从grails.util.Holderis检索到它。我在agrails环境中工作,但是我如何才能获得grailsApplication?我通过以下方式获得grailsApplication,使它现在可以像我想要的一样通用:'def grailsApplication=new Historie.domainClass.grailsApplication'@user3647093控制器自动获得它,服务和域可以使用类级def grailsApplication的自动连接,在其他任何可以从grails.util.Holders检索到它的地方保存下面的答案并给出您要查找的内容?下面的答案是否给出您要查找的内容?直接在clz对象上调用该方法要求该方法是静态的,因为您实际上是在调用Person.someMethod。直接在clz上调用该方法对象要求该方法是静态的,因为您正在有效地调用Person.someMethod@beechovsky,这是正确的。JVM不允许您在类引用上调用实例方法,因为这样做没有意义。最初的问题包括我需要类调用if的静态方法。所以我演示了怎么做。啊-是的!我现在明白了。直接在clz对象上调用该方法要求该方法是静态的,因为您实际上在调用Person.someMethod。直接在clz对象上调用该方法要求该方法是静态的,因为您实际上在调用Person.someMethod@beechovsky,这是正确的。JVM不允许您在类引用上调用实例方法,因为这样做没有意义。最初的问题包括我需要类调用if的静态方法。所以我演示了怎么做。啊-是的!我现在明白了。