显示神秘行为的功能

时间:2017-08-30 12:15:38

标签: java-8 kotlin

我正在开发一个带有kotlin帮助的Android应用程序,但问题是基于纯kotlin基础知识。下面是显示一些不寻常行为的函数:

fun CatchThat(funct: () -> Unit){
try {
    funct()
}catch (ex: Error){
    ex.printStackTrace()
}
}

当我在我的代码中使用它时

CatchThat {
// Proprietary Code goes in here
}
  • 调试器无法正常工作(有时)
  • 专有代码根本不执行(有时)

为什么遇到这种行为或者我得到一些错误的概念(可能是lambdas)。我们非常欢迎任何帮助或建议。(我是kotlin

的tyro

编辑我在专有代码中正在做的事情。 我正在尝试调用Thread Pool,而 private static String WildCardToRegular(String value) { return "^" + Regex.Escape(value).Replace("\\?", ".").Replace("\\*", ".*") + "$"; } 又调用了一个Web活动。这是最好的,我可以解释它。对不起,我很抱歉。

2 个答案:

答案 0 :(得分:3)

try / catch仅适用于当前线程。在你的代码片段中,如果另一个线程中有一些异常,那么try / catch将无法正常工作

例如:

try {
    println("Hola mundo 1!")
    println(5 / 0)
} catch (ex: Throwable) {
    println("Oups! $ex")// will be printed
}

try {
    Thread {
        println("Hola mundo 2!")
        println(5 / 0)
    }.start()
} catch (ex: Throwable) {
    println("Oups! $ex")// won't be printed
}

println("Hola mundo 3!")//The exception thrown in the external thread don't kill the current thread

有关调试问题,请查看Android Studio threaded debugging

答案 1 :(得分:1)

我不确定它是否能解决这个问题但是它值得一试,因为你所有的努力都是静止的(并且因为你的语法没有错误)。 我想如果调试器在错误的行上停止(或者有时不起作用),通常意味着  代码缓存中已损坏的内容

  

如果您正在使用Idea,请尝试使Idea智能缓存无效并重新启动。

在此之前

  

我还建议您使用最新版本更新Kotlin。