I've tried:
groovy:000> Set<String> s = ["a", "b", "c", "c"]
===> [a, b, c]
groovy:000> s
Unknown property: s
I want to be able to use this as a set, but even if I pass it explicitly, it turns it into an 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)
This problem only occurs because you're using the Groovy Shell to test your code. I don't use the Groovy shell much, but it seems to ignore types, such that
Set<String> s = ["a", "b", "c", "c"]
is equivalent to
def s = ["a", "b", "c", "c"]
and the latter does of course create a List
. If you run the same code in the Groovy console instead, you'll see that it does actually create a Set
Set<String> s = ["a", "b", "c", "c"]
assert s instanceof Set
Other ways to create a Set
in Groovy include
["a", "b", "c", "c"].toSet()
or
["a", "b", "c", "c"] as Set