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