你如何在 groovysh 中声明和使用 Set 数据结构?
How do you declare and use a Set data structure in groovysh?
我试过:
groovy:000> Set<String> s = ["a", "b", "c", "c"]
===> [a, b, c]
groovy:000> s
Unknown property: s
我希望能够将它用作一个集合,但即使我明确传递它,它也会将它变成一个 ArrayList:
groovy:000> joinList(["a", "b", "c", "c"])
ERROR groovy.lang.MissingMethodException:
No signature of method: groovysh_evaluate.joinList() is applicable for argument types: (java.util.ArrayList) values: [[a, b, c, c]]
Possible solutions: joinList(java.util.Set)
出现此问题的唯一原因是您使用 Groovy Shell 来测试您的代码。我不经常使用 Groovy shell,但它似乎忽略了类型,例如
Set<String> s = ["a", "b", "c", "c"]
相当于
def s = ["a", "b", "c", "c"]
而后者当然会创建一个 List
。如果您 运行 在 Groovy 控制台中使用相同的代码,您会看到它实际上创建了一个 Set
Set<String> s = ["a", "b", "c", "c"]
assert s instanceof Set
在 Groovy 中创建 Set
的其他方法包括
["a", "b", "c", "c"].toSet()
或
["a", "b", "c", "c"] as Set
Groovy >= 2.4.0
通过
在groovyshell中将interpreterMode
设置为true
:set interpreterMode true
应该可以解决这个问题
Groovy < 2.4.0
向变量添加类型使其成为 shell 环境中不可用的局部变量。
在groovysh
中使用如下
groovy:000> s = ['a', 'b', 'c', 'c'] as Set<String>
===> [a, b, c]
groovy:000> s
===> [a, b, c]
groovy:000> s.class
===> class java.util.LinkedHashSet
groovy:000>
我试过:
groovy:000> Set<String> s = ["a", "b", "c", "c"]
===> [a, b, c]
groovy:000> s
Unknown property: s
我希望能够将它用作一个集合,但即使我明确传递它,它也会将它变成一个 ArrayList:
groovy:000> joinList(["a", "b", "c", "c"])
ERROR groovy.lang.MissingMethodException:
No signature of method: groovysh_evaluate.joinList() is applicable for argument types: (java.util.ArrayList) values: [[a, b, c, c]]
Possible solutions: joinList(java.util.Set)
出现此问题的唯一原因是您使用 Groovy Shell 来测试您的代码。我不经常使用 Groovy shell,但它似乎忽略了类型,例如
Set<String> s = ["a", "b", "c", "c"]
相当于
def s = ["a", "b", "c", "c"]
而后者当然会创建一个 List
。如果您 运行 在 Groovy 控制台中使用相同的代码,您会看到它实际上创建了一个 Set
Set<String> s = ["a", "b", "c", "c"]
assert s instanceof Set
在 Groovy 中创建 Set
的其他方法包括
["a", "b", "c", "c"].toSet()
或
["a", "b", "c", "c"] as Set
Groovy >= 2.4.0
通过
interpreterMode
设置为true
:set interpreterMode true
应该可以解决这个问题
Groovy < 2.4.0
向变量添加类型使其成为 shell 环境中不可用的局部变量。
在groovysh
groovy:000> s = ['a', 'b', 'c', 'c'] as Set<String>
===> [a, b, c]
groovy:000> s
===> [a, b, c]
groovy:000> s.class
===> class java.util.LinkedHashSet
groovy:000>