目录
Object在Android独特的前缀通常有以下三种用法:
1、定义一个类并生成它的单例对象
object Singleton{
fun test(){}
}
原理
其实就是Java的单例模式,Kotlin中提供object方便创建单例
public final class Singleton {
public static final Singleton INSTANCE;
public final void xxx() {
}
private Singleton() {
}
static {
Singleton var0 = new Singleton();
INSTANCE = var0;
}
}
调用方式
类已经自动生成单例对象,直接使用类名,即可获取单例对象,调用对象方法
Singlton.test()
2、伴生对象(静态类)
Kotlin语言特有companion object代码块,替代Java中static关键字,内部定义的方法和属性成为该类的静态方法和静态属性
class User(val male: Int){
companion object {
val MALE = 0
fun isMale(male:Int) = male == MALE
}
}
原理
public final class User {
private final int male;
private static final int MALE = 0;
public static final User.Companion Companion = new User.Companion((DefaultConstructorMarker)null);
public final int getMale() {
return this.male;
}
public User(int male) {
this.male = male;
}
public static final class Companion {
public final int getMALE() {
return User.MALE;public static final User.Companion Companion = new User.Companion((DefaultConstructorMarker)null);
}
public final boolean isMale(int male) {
return male == ((User.Companion)this).getMALE();
}
private Companion() {
}
// $FF: synthetic method
public Companion(DefaultConstructorMarker $constructor_marker) {
this();
}
}
}
调用方式
User.MALE
User.isMale(1)
3、对象表达式
类似Java匿名内部类(在定义类的同时实例化类),一次性实现接口
拿点击事件举例,调用setOnClickListener()需传入一个实现View.onClickListener接口的对象
因为该对象是一次性使用,用匿名内部类
public void setOnClickListener(@Nullable OnClickListener l) {
throw new RuntimeException("Stub!");
}
object:接口{重写接口方法}
button.setOnClickListener(object : View.OnClickListener{
override fun onClick(v: View) {
}
})