Groovy has the def keyword to replace a type name when we declare a variable. Basically it means we don't really want to define the type ourselves or we want to change the type along the ride.
def myvar = 42
assert myvar instanceof Integer
myvar = 'I am a String' // String assignment changes type.
assert myvar instanceof String
String s = 'I am String'
assert s instanceof String
s = new Integer(100) // Surprise, surprise, value is converted to String!
assert s instanceof String
int i = 42
assert i instanceof Integer
try {
i = 'test' // Cannot assign String value to Integer.
} catch (e) {
assert e instanceof org.codehaus.groovy.runtime.typehandling.GroovyCastException
}