【问题标题】:Groovy redundant trim() callsGroovy 冗余 trim() 调用
【发布时间】:2018-03-16 11:13:35
【问题描述】:

我正在阅读一个 Groovy 脚本,发现有很多 trim() 调用,尤其是这种表达式:

x = "ok".trim()

我想知道 trim() 除了明显的修剪之外是否还有其他一些可以解释上述表达式的效果(它也可能只是糟糕的代码)。

【问题讨论】:

  • 在这种情况下:x = "ok".trim() 没有任何作用。
  • 我知道有一个String和一个GString,可能是某种转换?
  • 不,修剪会删除文本前后的空白。例如“ok”.trim() 会给你“ok”(没有空格)
  • 如果你的“ok”在某种程度上被认为是 GString(例如,如果其中有 ${..}),那么 trim() 将充当“golfed”.toString()。所以也许这可以归因于糟糕的复制和粘贴或内联?而且由于您的代码示例前面没有def,这是不是像jenkins、soapui、gradle这样的特殊雪花……您没有提到?
  • 上面某处只有一个def x = ...,它只是在框架中用作脚本语言(没什么特别的)

标签: java string groovy trim


【解决方案1】:

trim() 的默认定义从字符串的开头和结尾删除空格。因此,在您的应用程序中,如果您使用默认定义,则 "ok".trim() 没有任何效果。

但是,如果您更改 trim() 方法的定义,那么它可能会以不同的方式运行。现在 String 是一个最终类,因此您无法覆盖它,但 Groovy 为您提供了一个名为 metaclass 的功能,它允许您在运行时更改定义。

在 groovy console 上运行以下代码。

String.metaClass.trim = {
 //you could have your own trim implementation here for String class
 return "Hi"
}
x = "ok".trim()
println x  

输出:

Hi

所以,我的结论是,只要您不更改 trim() 的定义,您的代码就不会产生任何影响。

【讨论】:

  • 我 grepped 了 metaClass,没有找到任何东西。但非常有趣的答案(如果没有其他结果,我会接受)
  • 是的,有人写的代码不是很干净......我会删除修剪
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-21
  • 1970-01-01
  • 2010-09-20
  • 1970-01-01
  • 2012-01-22
  • 1970-01-01
相关资源
最近更新 更多