将 Kotlin 代码翻译成 Java - 理解语法
Translate Kotlin code into Java - Understanding the Syntax
我想试试这段代码,感谢 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")
}
谢谢,如果你能帮忙。
这是在使用解构声明,这在 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;
}
我想试试这段代码,感谢 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")
}
谢谢,如果你能帮忙。
这是在使用解构声明,这在 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;
}