7

Scala doesn't have проверенные исключения. Однако при вызове кода scala из java желательно поймать исключения, брошенные scala.Поймать на Java исключение, брошенное в Scala - недостижимый блок catch

Scala:

def f()= 
    { 
    //do something that throws SomeException 
    } 

Java:

try 
    { f() } 
catch (SomeException e) 
    {} 

Javac не нравится, и жалуется, что "это исключение никогда не выбрасывается из тела оператора Try"

Есть способ заставить scala объявить, что он выдает проверенное исключение?

+0

Пожалуйста, покажите свой точный код Java, потому что «try:» недопустим синтаксис. – OldProgrammer

+0

@OldProgrammer Исправлено. Извините, я привык к синтаксису python и слишком полагаюсь на свою IDE – goncalopp

ответ

11

Используйте throws аннотацию:

@throws(classOf[SomeException]) 
def f()= { 
    //do something that throws SomeException 
    } 

Вы также можете annotate a class constructor:

class MyClass @throws(classOf[SomeException]) (arg1: Int) { 
} 

Это covered in the Tour of Scala

+0

. Я думаю, что аннотация должна быть представлена ​​до 'def f()'. –

+0

@harpsealpup Действительно, я все еще экспериментирую с этим. Спасибо за отзыв – goncalopp

9

Вы все еще можете поймать слишком много исключений, а затем снова бросают те, которые вы не может обрабатывать:

try { f(); } 
catch (Exception e) { 
    if (e instanceof SomeException) // Logic 
    else throw e; 
} 
+1

+1 полезный, если у вас нет контроля над кодом scala – goncalopp