这只是我想要做的一个非常基本的例子。在foobar方法中还有更多的内容,但它是我所做的事情的要点。它显然不起作用,因为它无法编译,但我想知道我是否只是错误地传递了该类或使用了' className'参数错误的方式。我知道我可以重做它来获取类名的字符串并匹配它,但这样做似乎很遗憾。这将是如此美好和干。
levelsdf2
我不太了解Java或Groovy,所以我不确定可能还有什么不可能。随意告诉我"否。"我试过谷歌搜索,并没有找到任何真正为我回答问题的东西。哈哈,这个简单的不会很棒。
答案 0 :(得分:4)
是的,可以将类作为参数传递 - 在Groovy中,类是一等公民(see this thread for more detail)。
此构造:instance = new className(name: jsonParams.field)
实际上尝试创建名为className
的类的实例,而不是此变量引用的类的实例。要使其编译,您需要调用Class.newInstance:
class Foo {
String name
}
class Bar {
String name
}
def foobar(String name,Class clazz) {
def instance = clazz.findByName(name)
if(!instance) {
instance = clazz.newInstance(name:name)
}
return instance
}
foobar('foo', Foo)
foobar('bar', Bar)
我并不完全确定您希望使用findByName
方法实现的目标 - Foo
和Bar
都没有名为findByName
的静态方法。可以说。