Groovy - 是否可以将类作为参数传递?

时间:2015-05-13 19:16:09

标签: groovy

这只是我想要做的一个非常基本的例子。在foobar方法中还有更多的内容,但它是我所做的事情的要点。它显然不起作用,因为它无法编译,但我想知道我是否只是错误地传递了该类或使用了' className'参数错误的方式。我知道我可以重做它来获取类名的字符串并匹配它,但这样做似乎很遗憾。这将是如此美好和干。

levelsdf2

我不太了解Java或Groovy,所以我不确定可能还有什么不可能。随意告诉我"否。"我试过谷歌搜索,并没有找到任何真正为我回答问题的东西。哈哈,这个简单的不会很棒。

1 个答案:

答案 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方法实现的目标 - FooBar都没有名为findByName的静态方法。可以说。