【问题标题】:Catch in Java a exception thrown in Scala - unreachable catch block在 Java 中捕获 Scala 中抛出的异常 - 无法访问的 catch 块
【发布时间】:2013-11-29 04:26:45
【问题描述】:

Scala doesn't have 检查异常。但是,当从 java 调用 scala 代码时,最好捕获 scala 抛出的异常。

斯卡拉:

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

Java:

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

javac 不喜欢这样,并抱怨“这个异常永远不会从 try 语句体中抛出”

有没有办法让 scala 声明它抛出一个检查异常?

【问题讨论】:

  • 请显示您的确切 java 代码,因为“try:”不是有效的语法。
  • @OldProgrammer 已修复。对不起,我习惯了python的语法,太依赖我的IDE

标签: java scala exception-handling compiler-errors scala-java-interop


【解决方案1】:

使用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

【讨论】:

  • 我认为注释必须在def f()之前。
  • @harpsealpup 确实,我还在试验它。感谢您的提示
【解决方案2】:

您仍然可以捕获太多异常,然后重新抛出您无法处理的异常:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-01
    • 1970-01-01
    • 2011-02-09
    • 1970-01-01
    相关资源
    最近更新 更多