public interface Callable<V>  {
  V call() throws Exception;
}

class Cl implements Callable<String> {
  Object call() {}
}

-----
public interface Callable<V> {
public abstract V call() throws java.lang.Exception ;

}
---
public class Cl extends groovy.lang.GroovyObjectSupport implements Callable<java.lang.String>, groovy.lang.GroovyObject {
public java.lang.String call() {
return null;
}

public java.lang.Object getProperty(java.lang.String property) {
return null;
}

public void setProperty(java.lang.String property, java.lang.Object newValue) {
return ;
}

public java.lang.Object invokeMethod(java.lang.String name, java.lang.Object args) {
return null;
}

public groovy.lang.MetaClass getMetaClass() {
return null;
}

public void setMetaClass(groovy.lang.MetaClass metaClass) {
return ;
}

}
---