gpt4 book ai didi

groovy - 使用 map 构造函数时,在 groovy 中触发 setter 的顺序是什么

转载 作者:行者123 更新时间:2023-12-02 05:43:21 25 4
gpt4 key购买 nike

在 Groovy 中,当我调用映射构造函数时,例如

new Player(name:'Lionel', surname:'Messi', number: 10, team:barcelona)

我如何知道调用属性 setter 的顺序?

我需要知道这一点,因为我需要在我的一些 setter 中应用特定的逻辑,并且我需要知道调用每个 setter 时将在对象中设置哪些数据。

最佳答案

使用快速脚本,它们似乎是按照传递的顺序设置的:

class Foo {
def settersCalled = []
def setFoo(foo) { settersCalled << 'foo' }
def setBar(bar) { settersCalled << 'bar' }
def setBaz(baz) { settersCalled << 'baz' }
}

assert new Foo(foo: 0, bar: 0, baz: 0).settersCalled == ['foo', 'bar', 'baz']
assert new Foo(bar: 0, foo: 0, baz: 0).settersCalled == ['bar', 'foo', 'baz']
assert new Foo(baz: 0, bar: 0, foo: 0).settersCalled == ['baz', 'bar', 'foo']

但是,您可以通过使用调试器跟踪代码来进一步了解 Groovy 正在做什么。如果您在该代码的其中一个 setter 中放置一个断点,您会注意到调用堆栈包含 MetaClassImpl.setProperties,这意味着这些属性是由该方法设置的。如果我们看一下setProperties' code我们可以确认它正在使用 map 迭代器遍历构造函数中传递的 map 。而且,由于 Groovy 使用有序的 LinkedHashMaps 作为默认的 Map 实现,我们可以得出结论,这些属性将按照它们在构造函数的映射中定义的顺序设置:)

关于groovy - 使用 map 构造函数时,在 groovy 中触发 setter 的顺序是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10646340/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com