我们以类型安全的方式使用 groovy。在某些时候我想调用一个带有签名的方法
void foo(GString baa)
只要我输入的字符串包含一些${baz}
一切都很好,但是当我使用纯字符串时,我得到一个编译错误
foo("Hello, ${baz}") // fine
foo("Hello, world") // Cannot assign value of type java.lang.String to variable of type groovy.lang.GString
foo("Hello, world${""}") // fine but ugly
有没有一种从字符串创建 GString 的好方法?
编辑
猜猜我把我的问题简单化了。我正在使用命名构造函数参数来初始化对象。由于某些字符串是延迟评估的,因此我需要将它们存储为GString
.
class SomeClass {
GString foo
}
new SomeClass(
foo: "Hello, world" // fails
)
所以方法重载是没有选择的。
解决方案正如 willyjoker 提到的那样使用CharSequence
而不是 String
class SomeClass {
CharSequence foo
}
new SomeClass(
foo: "Hello, world" // works
)
new SomeClass(
foo: "Hello, ${baa}" // also works lazily
)