У меня есть такой код на Scala:
class Callee {
@throws(classOf[MyCheckedException])
def doStuff() {
}
}
Вызов из Java вот так:
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) {
}
}
}
Удаление Блок catch приводит к ошибке компилятора Java, говорящей о необработанном типе исключения MyCheckedException. Добавление блока catch для MyCheckedException приводит к тому, что компилятор жалуется на то, что блок catch недоступен, поскольку исключение никогда не генерируется.
Если я поймаю Exception и сделаю instanceOf, я смогу перехватить правильное исключение, выходящее из doStuff, но я думал, что аннотация @throws должна генерировать правильный байт-код для работы правильного блока catch. Я ошибаюсь, или здесь есть ошибка?
Для справки, это касается Scala 2.9.2 и Java 1.6.
Изменить:Он отлично компилируется, вызывая javac/scalac с помощью sbt из командной строки. Ошибка проявляется только во время компиляции -, так как -вы -вводите в Eclipse, что предполагает ошибку либо в компиляторе Eclipse Java, либо в какой-то части IDE. Могут ли другие воспроизвести это таким образом? Я использую Eclipse 3.7.2