2

私は Kotlin の真の初心者で、デモを始めたばかりです。

問題の解決策は簡単ですが、バグがあります

private fun assertEquals<T>(actual : T?, expected : T?, message : Any? = null) {
    if (actual != expected) {
        errors++
        println("Test failed")
        val trace = Thread.currentThread()?.getStackTrace()!!
        if (trace.size > 6) {
            // Finding relevant stack frames
            val location = trace.getFrameAfter("runs.Tester", "expect") // ERROR HERE
            val function = trace.getFrameAfter("runs.TesterRunner", "forFunction") // AND HERE
            println("at ${function?.getClassName()}.${function?.getMethodName()}(line:${location?.getLineNumber()})")
        }
        if (message != null)
            println(message)
    }
    else if (!skipSuccessful)
        println("OK")
}

わかりません。それは言う

 Type mismatch: inferred type is kotlin.Array<java.lang.StackTraceElement> but
 kotlin.Array<java.lang.StackTraceElement?> was expected

そして、前者がどのように推測されたのか、なぜ後者が予想されるのか、私にはわかりません。特に、1 つのメソッド呼び出しから 2 つのそのような仮定がどこから来るのかわかりません。

問題のある行を削除して「修正」しましたが、誰かが私を啓発できると確信しています。

4

1 に答える 1

4

問題は、関数getFrameAfterが で定義されてkotlin.Array<java.lang.StackTraceElement?>いるのに、それを変数 で呼び出そうとしたtraceことでした。そのタイプは でしkotlin.Array<java.lang.StackTraceElement>た。

Kotlin Web Demo の例を修正したので、もう一度試すことができます。

于 2014-09-01T08:46:37.227 に答える