gpt4 book ai didi

string - 在Groovy中打开字符串值会产生意外的结果

转载 作者:行者123 更新时间:2023-12-02 15:20:01 26 4
gpt4 key购买 nike

我正在使用常规/细粒度设置,尝试对String值执行switch语句时遇到一些麻烦。

基本上,我在Web服务响应中遍历属性名称,以查看它们是否匹配基于每个用户配置的预定义映射。如果他们已在该字段上建立了映射,则将值从响应中拉出并在其他地方使用它。

代码看起来像这样:

switch(attributeName)
{
case {attributeName} :
log.info("Currently switching on value... ${attributeName}")

case user.getFirstNameMapping():
model.user.userInfo.firstName = attributeValue
break
case user.getLastNameMapping():
model.user.userInfo.lastName = attributeValue
break
case user.getAuthenticationKeyMapping():
model.authenticationValue = attributeValue
break
case user.getEmailMapping():
model.email = attributeValue.toLowerCase()
break
}

启用的值(attributeName)的类型为String,用户实例的getter方法也返回类型为String。

根据我对Groovy语言的研究和理解,打开诸如String之类的对象应该最终使用String.equals()进行比较。但是,结果是它每次都在user.getFirstNameMapping()情况下匹配,并反复覆盖模型中的值。因此,响应中返回的最后一个值是最终保存的值,其他任何值均未保存。

有趣的是,如果我使用if / else结构并执行以下操作:
if(attributeName.equals(user.getFirstNameMapping())
{
...
}

每次都能正常工作。我已通过日志验证,这不是多余的空格或大写字母问题。我还尝试过更改默认情况下运行开关的操作,并在这种情况下显式比较attributeName:
switch(true)
{
case {attributeName} :
log.info("Currently switching on value... ${attributeName}")
case {user.getFirstNameMapping().equals(attributeName)}:
model.user.userInfo.firstName = attributeValue
break
case {user.getLastNameMapping().equals(attributeName)}:
model.user.userInfo.lastName = attributeValue
break
case {user.getAuthenticationKeyMapping().equals(attributeName)}:
model.authenticationValue = attributeValue
break
case {user.getEmailMapping().equals(attributeName)}:
model.email = attributeValue.toLowerCase()
break
}

而且它仍然无法以完全相同的方式满足我的期望。因此,我想知道为什么switch语句应仅使用.equals()比较字符串,而当我使用.equals()在if / else中显式比较它们时,为什么会如此?

最佳答案

问题出在您的交换机盒中。

在这里看看:

case {attributeName} :
log.info("Currently switching on value... ${attributeName}")

case user.getFirstNameMapping():
model.user.userInfo.firstName = attributeValue
break

如您所见,这两种情况将每次都运行,因为切换条件是:-
switch(attributeName)

因此,第一个将获得匹配并一直运行直到遇到中断。这是在案例2之后,即 case user.getFirstNameMapping():,所以我建议您在swtich开始之前打印 {attributeName}的值。

希望对您有所帮助。

谢谢

关于string - 在Groovy中打开字符串值会产生意外的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38135375/

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