dictionary - Groovy - 在对象实例化期间忽略映射中的额外属性

标签 dictionary groovy constructor attributes

有没有办法让 groovy 在对象实例化期间忽略映射中的额外属性?例子:

class Banana{
    String name
}
def params = [name:'someGuy', age:13]
new Banana(params)

在这个例子中,groovy 抛出了一个 No such property: age 异常(显然是因为在 Banana 类中没有定义年龄。不用手动将所需的属性从 map 映射到 Banana 类的构造函数,有没有办法告诉香蕉忽略额外的属性?

我注意到 Grails 域类没有遇到这个问题,我希望这里有相同的行为!

感谢您的帮助和建议!

最佳答案

不幸的是,在 groovy 中没有内置的方法来做到这一点。 Grails 通过为域对象生成自己的构造函数来实现这一点。一个简单的解决方法是使用这样的构造函数:

Banana(Map map) {
    metaClass.setProperties(this, map.findAll { key, value -> this.hasProperty(key) })
}

关于dictionary - Groovy - 在对象实例化期间忽略映射中的额外属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10195653/

相关文章:

Javascript,常规调用方法?

java - 如何在 Java 或 Groovy 中处理并发

grails - Groovy:使用Grails和Spring安全核心插件时出现意外 token

c# - 我怎样才能调用构造函数?

c++ - 在不失去对其构造函数的访问的情况下稍微派生一个类

python - 如何将字典+列表组合成一个排序列表

python-3.x - 收集特殊键和值并将其放在字典中

python - 在遍历字典的同时修改字典。 Python 字典中的错误?

python - 在 pandas 中,如何从字典列表创建数据框?

javascript - 在构造函数 javascript 中将属性设置为函数