【问题标题】:Translate Kotlin code into Java - Understanding the Syntax将 Kotlin 代码翻译成 Java - 理解语法
【发布时间】:2021-02-09 21:22:06
【问题描述】:

感谢Azimuth reading changes to opposite when user holds the phone upright,我希望向我们尝试这段代码 我需要使用这段代码在 Java 中进行实验,但是我不确定如何将下面的代码翻译成 Java:

    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")
        }

如果你能帮忙,谢谢。

【问题讨论】:

  • 那不是 C 代码。
  • 啊,感谢 Kotlin
  • Kotlin when 的第一个谷歌搜索结果是 this, the actuald docs。声明:The when expression replaces the switch statement in C-like languages。所以……把它换成switch

标签: java android kotlin android-sensors


【解决方案1】:

这是使用解构声明,这在 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;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-11-25
    • 1970-01-01
    • 1970-01-01
    • 2016-08-04
    • 2014-01-06
    • 1970-01-01
    • 2021-12-03
    相关资源
    最近更新 更多