我试过了:
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)
答案 0 :(得分:21)
只有在您使用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
答案 1 :(得分:13)
Groovy&gt; = 2.4.0
通过
interpreterMode
设置为true
:set interpreterMode true
应解决此问题
Groovy&lt; 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>