6 groovy
这只是我想做的一个非常基本的例子。在 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)
Run Code Online (Sandbox Code Playgroud)
我不太了解 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)
Run Code Online (Sandbox Code Playgroud)
? 我不完全确定你想用这个findByName方法实现什么——据我所知,Foo也Bar没有一个静态方法命名findByName。
| 归档时间: |
|
| 查看次数: |
5963 次 |
| 最近记录: |