本章节讲述Kotlin中几个关键字的使用,先看demo
People类
class People {
/** 外部调用 先new类对象 然后 类对象.out */
val out = "外部"
/** 外部调用 先new类对象 然后 类对象.method1 */
fun method1(string: String): String {
return string + "外部"
}
/** 外部调用 类名.属性 类名.方法名 */
companion object {
const val name = "张三"
const val age = 14
fun method(int: Int): Int {
return int + 1
}
}
}
Activity调用
class KotlinActivity3 : AppCompatActivity() {
private lateinit var textView: TextView
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_kotlin3)
initView()
}
/**
* 初始化View
*/
private fun initView() {
textView = findViewById(R.id.textView)
textView.text = "点击"
textView.setOnClickListener {
val name = People.name
val age = People.age
val result = People.method(10)
val people = People()
val out = people.out
val string = people.method1("方法")
Log.d("KotlinActivity", "name:$name")
Log.d("KotlinActivity", "age:$age")
Log.d("KotlinActivity", "result:$result")
Log.d("KotlinActivity", "out:$out")
Log.d("KotlinActivity", "string:$string")
}
}
}
结果
D/KotlinActivity: name:张三
D/KotlinActivity: age:14
D/KotlinActivity: result:11
D/KotlinActivity: out:外部
D/KotlinActivity: string:方法外部
说明
1.获取类实例
Java代码
People people = new People();
String out = people.getOut();
String result = people.method1("Java");
Log.d("MainActivity", "out:" + out);
Log.d("MainActivity", "result:" + result);
结果
D/MainActivity: out:外部
D/MainActivity: result:Java外部
Kotlin代码
val people = People()
val out = people.out
val string = people.method1("方法")
可见,Kotlin中想要声明一个类对象 需要使用var或者val关键字声明一个变量 然后将类名+()赋值给这个变量即可。
companion&const关键字
Kotlin中companion&const关键字一般一起使用,可以起到类似Java中static的作用。
比如Java中我们可以声明一个类,类中有静态的属性和静态的方法。那么外部想要调用该类中的属性或者方法直接使用类名.属性或者类型.方法名即可。
因为Kotlin中没有static关键字,所以无法像Java那样实现。那么我们想要实现上述Java的功能怎么实现呢?我们可以使用companion&const关键字的组合。
注意:
1.companion关键字一般在一个类的内部 后面跟着Object关键字。
companion object {
}
2.const关键字
const关键字 其实和Java的final,Kotlin的val类似。也是常量的意思。但是它的作用域是在companion object内部。
3.总结
上述使用 companion+const关键字 实现 类似Java的static的机制,在Kotlin中称为伴生对象机制。伴生对象提供了一种机制,用于定义在概念上与某个类型相关但不与某个特定对象关联的变量或函数。伴生对象类似于对变量和方法使用 Java 的 static 关键字。