这篇讨论的仅仅是记录一些常用的便捷写法,方便查询!
方法的重载
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)