簡體   English   中英

將 Kotlin 代碼翻譯成 Java - 理解語法

[英]Translate Kotlin code into Java - Understanding the Syntax

我正在嘗試向我們嘗試這段代碼,這要歸功於當用戶直立手機時方位角讀數會發生變化

    override fun onSensorChanged(event: SensorEvent) {
        if (event.sensor.type != Sensor.TYPE_ROTATION_VECTOR) return
        SensorManager.getRotationMatrixFromVector(rotationMatrix, event.values)
        val (matrixColumn, sense) = when (val rotation = 
                activity.windowManager.defaultDisplay.rotation
        ) {
            Surface.ROTATION_0 -> Pair(0, 1)
            Surface.ROTATION_90 -> Pair(1, -1)
            Surface.ROTATION_180 -> Pair(0, -1)
            Surface.ROTATION_270 -> Pair(1, 1)
            else -> error("Invalid screen rotation value: $rotation")
        }
        val x = sense * rotationMatrix[matrixColumn]
        val y = sense * rotationMatrix[matrixColumn + 3]
        azimuthChanged(-atan2(y, x))
    }

如果有人可以幫助理解並將其翻譯為 Java 這將是一個很大的幫助,它看起來相當簡單,但我不確定這些行的語法:

val (matrixColumn, sense) = when (val rotation = 
                activity.windowManager.defaultDisplay.rotation
        ) {
            Surface.ROTATION_0 -> Pair(0, 1)
            Surface.ROTATION_90 -> Pair(1, -1)
            Surface.ROTATION_180 -> Pair(0, -1)
            Surface.ROTATION_270 -> Pair(1, 1)
            else -> error("Invalid screen rotation value: $rotation")
        }

謝謝,如果你能幫忙。

這是使用解構聲明,這在 Java 中不可用,因此您必須聲明兩個變量,然后在switch語句中分配它們,這類似於 Kotlin when語句。

int matrixColumn;
int sense;
switch(getActivity().getWindowManager().getDefaultDisplay.getRotation()) {
    case Surface.ROTATION_0:
        matrixColumn = 0;
        sense = 1;
        break;
    case Surface.ROTATION_90:
        matrixColumn = 1;
        sense = -1;
        break;
    case Surface.ROTATION_180:
        matrixColumn = 0;
        sense = -1;
        break;
    default: // Surface.ROTATION_270:
        matrixColumn = 1;
        sense = 1;
        break;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM