Java avec Groovy de la manipulation de fermetures de lever des Exceptions

Nous avons un système qui est possible de personnaliser à l'aide de scripts groovy et j'ai repéré un très étrange effet sur le type d'exceptions lancer à partir de ces scripts.

Nous avons un script groovy avec les éléments suivants:

process {
   throw new Exception("weeee")
}

Processus est défini comme une Fermeture de la classe de base du script:

public abstract class ScriptBaseClass extends Script {
   Closure process;

   public void process( Closure code ) {
      process = (Closure) code.clone();
   } 
}

Dans le classe Java qui exécute les scripts, nous avons la méthode suivante (omis de tous la mise en place de code comme il ne semble pas pertinent):

public void process() {
   try {
      script.process.call();
   } catch (Exception e) {
      logger.debug("exception thrown from groovy script", e);
      throw e;
   }
}

Remarque le processus de la méthode ici n'est pas déclaré, il jette tout de même des exceptions. Cependant très clairement re-lève l'Exception e qu'il a attrapé. Ce code est valide, il compile et fonctionne tout à fait heureux. Il lève l'Exception que je le voulais.

Ce que quelqu'un sait comment cela est code juridique? En théorie je ne devrais pas être en mesure de jeter un checked exception d'une méthode qui n'a pas à déclarer qu'il se jette sur elle.

oui, c'est légal en groovy. ne trouve aucune mention dans les docs btw, mais il était toujours en train de travailler
En effet, je sais que c'est légal en groovy, cependant, le processus de la méthode ci-dessus, qui re-lève l'exception est dans une classe Java. Normalement, si vous jetez un checked exception, vous devez le déclarer. Cela semble être un cas particulier autour de l'interface de ces deux langues.
oh, désolé, première partie sur groovy a été source de confusion, donc j'ai raté la partie java

OriginalL'auteur Wil Selwood | 2015-08-13