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

Groovy—是否可以将类作为参数传递?,groovy,Groovy,这只是我想做的一个非常基本的例子。foobar方法中还有更多的内容,但这是我所做工作的要点。它显然不起作用,因为它无法编译,但我想知道我是否只是错误地传递了类,或者以错误的方式使用了“className”参数。我知道我可以修改它以获取类名的字符串并匹配它,但这样做似乎很遗憾。这将是如此美好和干燥 class Foo { String name } class Bar { String name } def foobar(field, className) { def ins

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

class Foo {
   String name
}

class Bar {
   String name
}

def foobar(field, className) {
   def instance = className.findByName(jsonParams.field)
   if(!instance) {
      instance = new className(name: jsonParams.field)
   }

   return instance
}

foobar(foos, Foo)
foobar(bars, Bar)

我对Java或Groovy了解不多,所以我还不确定什么是可能的,什么是不可能的。请随便告诉我“不”。我试过谷歌搜索,但没有找到任何真正能回答我这个问题的答案。在这一点上,一个简单的“否”就很好了,哈哈。

是的,可以将类作为参数传递-在Groovy中,类是第一类公民()

此构造:
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
的静态方法。

这个“field”参数的意图是什么?一般地设置属性?看起来您想要设置所创建实例的
名称
,这是可行的。是的。这正是我想做的。然而,它在这一行中不断失败,表示它无法解析类className。字段参数只是为了从json对象中获取正确的数据。请尝试
className.newInstance()
而不是
newclassname()
。还可以使用
foobar(字段,类名)
使签名清晰易懂。
newInstace()
正是我想要的。谢谢你的提示
newInstance
正是我所需要的。谢谢你的回答。我以前从未见过这种情况。