gpt4 book ai didi

java - Groovy在java注释中插入多行字符串

转载 作者:行者123 更新时间:2023-11-30 07:43:00 28 4
gpt4 key购买 nike

是否可以编译带有常量@Sql注释的groovy代码?

下面的代码是简单的测试,用Spock编写。

@Sql(statements = ["""
INSERT INTO pracownik ($Fields.KOMPETENCJA_ID, nr_ewid)
values (1, 'A');
INSERT INTO typ_zadania (id, kod) values (1, 'KOD');
"""]
)
def "should add new qualification"() {
//test code omitted
}

当我想运行测试方法时,我在编译时遇到错误:

Groovyc: Expected ' INSERT INTO pracownik ($Fields.KOMPETENCJA_ID, nr_ewid) values (1, 'A'); INSERT INTO typ_zadania (id, kod) values (1, 'KOD'); to be an inline constant of type java.lang.String in @org.springframework.test.context.jdbc.Sql`

我认为带美元符号的多行字符串被评估为 GString 对象,但语句字段是字符串数组的类型。

我可以在groovy代码中使用多行字符串中的java注释常量吗?

最佳答案

您面临的问题与多行字符串无关 - 编译器期望传递给 statement 属性的值是内联常量。带有插值变量的 GString 不能满足此期望。如果您编写包含来自 Fields 类字段的内插值的单行 GString,您会看到完全相同的编译错误。

您的意图似乎是获取与 Fields.KOMPETENCJA_ID 关联的列名称。将其替换为期望值,因此不需要插值。像这样的事情:

@Sql(statements = """
INSERT INTO pracownik (kompetencja_id, nr_ewid)
values (1, 'A');
INSERT INTO typ_zadania (id, kod) values (1, 'KOD');
""")
def "should add new qualification"() {
//test code omitted
}

One interesting fact about Groovy. The double quote " is usually used to represent GString type. However, Groovy compiler checks if the string contains any variables like ${variableName} to do the interpolation. If it finds any, it uses GString as a type, and String otherwise.

关于java - Groovy在java注释中插入多行字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53917169/

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