Kotlin 中那些便捷的写法

这篇讨论的仅仅是记录一些常用的便捷写法,方便查询!

方法的重载

Kotlin 中并没有重载这一说,但 Java 中是存在的,因此为了兼容 Java 所以有了@JvmOverloads

举例:

Java 代码

void add(int a){}
void add(int a,int b){}
void add(int a,int b,int c){}
void add(int a,int b,int c,int d){}
void add(int a,int b,int c,int d,int e){}

Kotlin 代码

@JvmOverloads
fun add(a: Int,b:Int=0,c:Int=0,d:Int=0,e:Int=0) {}

Kotlin 中的一个方法就可以替代 Java 中的五个方法,关键就在于@JvmOverloads

同样的最常用的就是在 Android 的自定义 View 中

Java 代码

public class CustomView extends View {

    public CustomView(Context context) {
        super(context);
    }

    public CustomView(Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
    }

    public CustomView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }
}

Kotlin 代码

class CustomView @JvmOverloads constructor(context: Context,attrs: AttributeSet? = null,defStyleAttr: Int = 0) : View(context,attrs,defStyleAttr)

是不是方便的!

@JvmOverloads作用:给有默认值的参数生成重载方法。

设置监听

监听的设置本质上是内部的方法被调用.在 Kotlin 中省去了接口的使用,因为 Kotlin 中方法(或者说含函数)是可以被传递的,同时也存在函数类型.

Java 方式的监听代码

var listener: OnClickListener? = null

interface OnClickListener{
    fun onClick(view:View?)
}

fun setOnClickListener(listener: OnClickListener){
    this.listener = listener
}

//调用时
listener?.onClick(view)

Kotlin 方式的监听代码

var onClick: ((View) -> Unit)? = null

fun setOnClickListener(onClick: (View) -> Unit){
    this.onClick = onClick
}

//调用时
onClick?.invoke(view)