2012-04-26 7 views
7

Tengo algo de código Scala como esto:@throws en Scala no permite llamar a Java para atrapar la excepción del tipo correcto

class Callee { 
    @throws(classOf[MyCheckedException]) 
    def doStuff() { 
    } 
} 

Llamarlo desde Java, así:

public class Caller { 

    public static void main(String[] args) { 
    // this won't compile; the Java compiler complains that the catch block is unreachable 
    // however without the catch block, it complains "unhandled exception MyCheckedException" 
    try { 
     new Callee().doStuff(); 
    } 
    catch (MyCheckedException e) { 

    } 
    } 
} 

Extracción del bloque catch da como resultado un error del compilador de Java que dice 'excepción no controlada tipo MyCheckedException'. Al agregar el bloque catch para MyCheckedException, el compilador se queja de que el bloque catch no está disponible, porque la excepción nunca se lanza.

Si capturo Exception y hago un instanceOf, puedo interceptar la excepción correcta que sale de doStuff, pero pensé que se suponía que la anotación @throws generaba el bytecode correcto para que funcione el bloque catch adecuado. ¿Estoy equivocado, o hay un error aquí?

Para el registro, esto es con Scala 2.9.2 y Java 1.6.

Edit: Compila bien invocando javac/scalac utilizando sbt desde la línea de comandos. El error solo aparece durante la compilación tal como se escribe en Eclipse, que sugiere que el error está en el compilador Eclipse Java o en alguna parte del IDE. ¿Pueden otros reproducirlo de esta manera? Estoy usando Eclipse 3.7.2

+1

ayuda que le ayudemos, muestran un cierto código –

+0

No se puede reproducir, puede ofrecerle un ejemplo completo? – axtavt

+0

Las clases completas ahora se incluyen más arriba –

Respuesta

6

Puedo reproducir esto en Helios con 2.9.1. Es un error en el compilador de presentación, y debe plantearlo como un error en http://www.assembla.com/spaces/scala-ide/tickets.

+2

Gracias. Puede o no ser un duplicado de http://scala-ide-portfolio.assembla.com/spaces/scala-ide/tickets/[email protected] scala-traits, pero lo plantearé por separado por ahora –

+0

@David North Estoy bastante seguro de que es un duplicado del ticket que vinculó. Tal vez pueda agregar su caso de prueba al mismo boleto. –

+0

Terminó levantando http://scala-ide-portfolio.assembla.com/spaces/scala-ide/support/tickets/[email protected]ing -código –

2

Para referencia futura, este problema ha sido resuelto (https://github.com/scala-ide/scala-ide/commit/055a81cd3fe792e4327668791888c30cf04793f5). La solución ya está disponible con ambos Scala IDE 2.0.x and Helium nightlies. Además, se incluirá en la próxima versión de mantenimiento Scala IDE 2.0.2.

(lo siento por el ruido adicional, pero me di cuenta de que tener una respuesta era más visible que un simple comentario)

Cuestiones relacionadas