Am 12.01.2016 um 11:01 schrieb Alberto Vilches:
Thank you! Now I know the difference between these two operators :) I
always though the Java-like cast do an "as type" behind the scenes. I
think is kind of confusing to have theoretically equivalent operator
with differents results.
One more: The main difference is that "as" will allow the user to supply
custom casts, while the normal cast is defined by the language. So for
example I can do the following
class Foo {
def asType(Class c) {
if (c==Bar) return new Bar(inner:this)
return super.asType(c) // call Object.asType(Class)
}
}
class Bar {
def inner
}
def f = new Foo()
def b = f as Bar
assert b.inner == f
And of course it could be a much more complex option, plus you can
provide default methods to allow for such conversions.
Deeping in the code I have another differents
like [] as Set creates a LinkedHashSet and (Set)[] creates a HashSet.
Anyway, I don't mind the current behavior, but I really think it should
be documented (before to write the question in the mail list, I tried to
find in the docs with no results). Thank you again for your time, it's
really appreciated.
It is mentioned under
http://docs.groovy-lang.org/docs/groovy-2.4.0/html/documentation/#_coercion_operator
Maybe the section is a bit too short, but it is mentioned ;)
bye Jochen