我不确定这是 Groovy 的东西还是 Java 的东西,我见过变量赋值的实例,例如:
String myVar = ""
...
(myVar) = someMethod(arg1);
myVar
周围的括号有什么作用吗,还是只是为了可读性?
它在 Java 和 Groovy 中都是“事物”(如,它是允许的)。 Groovy 可以使用该语法进行复合赋值(即使它只分配一件事......)
String x, y, z
(x, y, z) = ["1", "2", "3"]
Java 没有复合赋值。无论如何,Java 语言规范 15.26.1 规定您可以使用任意数量的括号对:
如果左侧操作数表达式是字段访问表达式 e.f (§15.11),可能用一对或多对括号括起来,则:
重要的是,当它被完全求值时,它是一个“字段访问表达式”(或“数组访问表达式”)。
myVar 两边的括号有什么作用吗
不。
或者只是为了可读性?
我认为这会损害可读性。不过,风格的一致性更重要。也许他们希望普通作业在复合作业之间保持一致?
String a
(a) = "123"
String x, y, z
(x, y, z) = ["1", "2", "3"]
您展示的语法是一种解构形式。
Groovy 支持多重赋值,即可以一次分配多个变量,例如:
def (a, b, c) = [10, 20, 'foo'] assert a == 10 && b == 20 && c == 'foo'
如果您愿意,您可以提供类型作为声明的一部分:
def (int i, String j) = [10, 'foo'] assert i == 10 && j == 'foo'
除了在声明变量时使用之外,它也适用于现有变量:
def nums = [1, 3, 5] def a, b, c (a, b, c) = nums assert a == 1 && b == 3 && c == 5
该语法适用于数组和列表,以及返回其中任一者的方法:
def (_, month, year) = "18th June 2009".split() assert "In $month of $year" == 'In June of 2009'
该语法目前没有任何意义,但合法