kotlin编写Android的坑总结

Kotlin中的静态字段

Java中的public static在拷贝到Kotlin项目中会自动转换为val。但是在调用时EXTRA_MESSAGE会标红无法检测,而添加Static字段也会报错。
原因是Kotlin中没有static关键字。
Java中的static应该用companion(类伴生对象)替代。
谷歌Android官方示例项目中的EXTRA_MESSAGE应该改为如下:

package com.example.myfirstapp

import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import android.view.View
import java.io.Console
import android.provider.AlarmClock.EXTRA_MESSAGE
import android.widget.EditText
import android.content.Intent



class MainActivity : AppCompatActivity() {

    companion object {
        const val EXTRA_MESSAGE = "com.example.myfirstapp.MESSAGE"
    }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
    }

    /** Called when the user taps the Send button */
    public fun sendMessage(view: View){
        val intent = Intent(this, DisplayMessageActivity::class.java)
        val editText = findViewById<View>(R.id.editText) as EditText
        val message = editText.text.toString()
        intent.putExtra(EXTRA_MESSAGE, message)
        startActivity(intent)
    }
}

不加const其实也行,但就是语义不是那么规范了。【而且会报错哦!

在调用时可以使用如下两种方式访问:

MainActivity.EXTRA_MESSAGE

或者

MainActivity.Companion.EXTRA_MESSAGE

但是为什么会这样呢?_(:з」∠)_

中文并没有这方面的解答。
但是Kotlin官网有这样的讨论
Kotlin中companion对象可以替代static的核心原因是kotlin中创建伴生单例对象语法简单。
匿名对象可以实现某个或某几个接口,而这个是java中做不到。

Be the first to comment

Leave a comment

Your email address will not be published.


*


不够聪明的人工智能可进不来哦 *