在Groovy类中设置命名参数无效,但设置所有参数有效

km0tfn4u  于 2022-11-01  发布在  其他
关注(0)|答案(1)|浏览(214)

我的目标是为一个类设置一个参数,但保留所有其他参数的默认值(也就是设置一个命名参数)。

对于此类:https://javadoc.jenkins-ci.org/jenkins/slaves/RemotingWorkDirSettings.html
您可以只使用默认值或传递参数来构造它。
两者都是有效的建构函式:

new RemotingWorkDirSettings()
new RemotingWorkDirSettings​(boolean disabled, String workDirPath, String internalDir, boolean failIfWorkDirIsMissing)

我想将参数failIfWorkDirIsMissing设置为true,但保留其他默认值。
此工作方式:new RemotingWorkDirSettings(false, 'a_string_here', 'b_string_here', true)
这不会:new RemotingWorkDirSettings(failIfWorkDirIsMissing: true)
引发异常:

groovy.lang.ReadOnlyPropertyException: Cannot set readonly property: failIfWorkDirIsMissing

问题:
1.当我传递所有参数时,我可以设置它,它怎么会是“只读”的呢?因为它“可以”被设置,所以它在显式意义上不是真正的“只读”。
1.如何在不显式设置所有其他参数的情况下设置此参数?**

vohkndzv

vohkndzv1#

Java中不支持命名参数,您必须指定构造函数/方法所需的所有参数。
对于语法new A(b:1, c:2),groovy将尝试使用参数Map查找A,然后尝试使用默认构造函数并设置相应的属性...
看看class methods--没有setFailIfWorkDirIsMissing方法--这就是为什么它是只读的,并且可以使用带位置参数的构造函数来设置。

相关问题