Вот как можно безопасно разыграть в Try-Catch Block, используя Kotlin.Это проблема синтаксиса.Для Kotlin нет ответа, связанного с этим, поэтому я поделюсь этим, чтобы сэкономить время для других.
Обычно для безопасного произнесения люди используют этот формат:
fun functionName() {
if (propertyName is ClassName1) {
val variableName2 = propertyName as ClassName1()
propertyName.memberFunction()
}
}
Следующеекод покажет, когда возникнет ошибка компиляции (я мог бы показать слишком много, но я хочу, чтобы вы, ребята, поняли контекст):
import android.graphics.Canvas
import android.view.SurfaceHolder
import java.lang.Exception
class MainThread(surfaceHolder: SurfaceHolder, gameView: GameView): Thread() {
private lateinit var surfaceHolder: SurfaceHolder
private lateinit var gameView: GameView
private var running: Boolean = false
private var canvas: Canvas? = null
override fun run() {
super.run()
while(running) {
try {
canvas = this.surfaceHolder.lockCanvas()
synchronized(surfaceHolder) {
this.gameView.update()
this.gameView.draw(canvas) // Error arises at this line
}
} catch (e: Exception) {
} finally {
if(canvas != null){
try {
surfaceHolder.unlockCanvasAndPost(canvas)
} catch (e: Exception){
e.printStackTrace()
}
}
}
}
}
Ошибка вывода сборки:
Smart cast to 'Canvas' is impossible,
because 'canvas' is a mutable property that could have been changed by this time