Da qualche tempo sto sviluppando in Groovy e mi chiedo quanto spesso dovrei usare il casting dinamico   def   ? Un mio collega crede che dovremmo usarlo sempre in quanto aiuta Groovy in un modo che non capisco. 
Attualmente, quando dichiaro il metodo restituisce i tipi e gli argomenti, mi piace dichiarare deliberatamente quali oggetti devono essere presi e sputati (per la leggibilità del codice e provengo da uno sfondo Java per me ha senso) esempio:
String doSomething(String something){
    //code
}
// vs
def doSomething(def somthing){
    //code
}
// vs 
def doSomething(somthing){
    // code
}
 Quindi immagino che la mia domanda sia solo una preferenza su quando usare   def    o c'è un reale vantaggio nell'utilizzarlo tutto il tempo? (Ho aggiunto l'ultimo esempio perché ho ritenuto che fosse adatto alla domanda come opzione valida per Groovy)