我有jenkins共享库。它具有一些CustomClass.groovy,其中包含重写的toString()方法:
package com.jenkins
class CustomClass {
CustomClass(){
}
@Override
String toString() {
return "custom_class"
}
}
我有Jenkinsfile:
@Library("sharedlib@to-string")
import com.jenkins.CustomClass
println("1")
println(new CustomClass())
println("2")
println("prefix: " + new CustomClass())
println("3")
println("prefix: " + new CustomClass().toString())
它产生以下输出:
[Pipeline] echo
1
[Pipeline] echo
2
[Pipeline] echo
custom_class
[Pipeline] echo
3
[Pipeline] echo
prefix: custom_class
[Pipeline] End of Pipeline
Finished: SUCCESS
我对该输出有些困惑:
答案 0 :(得分:0)
请特别注意,在二进制类(例如
@Override
)中定义的方法的Object.toString()
通常应标记为@NonCPS
,因为通常是调用它们的二进制代码。
以下内容将正常工作:
class A{
@NonCPS
@Override
public String toString(){
return "A[123]"
}
}
node {
def a = new A()
echo('1 >>>')
echo(message: "Hello ${a}")
echo('2 >>>')
echo(message: "Hello " + a)
echo('3 >>>')
echo(message: "Hello " + a.toString())
}