文章目录
定义
在 Kotlin 中,如果一个接口只有 一个抽象方法(其他非抽象成员数量不限),可以写成类似函数的形式。
kt
fun interface Editable {
// 此处 abstract 可省略
abstract fun edit()
}
实例化
正常情况下,我们实例化接口需要用到匿名对象object {}
:
kt
fun main() {
val editable = object : Editable {
override fun edit() {
print("编辑中...")
}
}
editable.edit()
}
编辑中...
而定义了函数式接口后,我们可以这样做:
kt
fun main() {
val editable = Editable {
print("编辑中...")
}
}
Kotlin 调用 Java 单抽象方法接口
(不知道 Java 是什么可以跳过)
在 Java 中的Runnable
接口中只定义了一个抽象方法run
,这样的 Java 单抽象方法接口在 Kotlin 中是可以像调用函数式接口fun interface
一样调用的(Kotlin 的接口则必须在定义时interface
前加fun
才行):
java
// Runnable.java
@FunctionalInterface
public interface Runnable {
/**
* Runs this operation.
*/
void run();
}
如果使用 Java 实例化该接口,需要这样写:
java
public class Test {
public static void main(String[] args) {
// 这是实例化的位置
new Runnable() {
@Override
public void run() {
System.out.print("Run");
}
};
}
}
而使用 Kotlin 是这样写的:
kt
fun main() {
object : Runnable {
override fun run() {
print("Run")
}
}
}
使用函数式接口调用的写法后,它又是这样的:
kt
fun main() {
Runnable {
print("Run")
}
}
该学谁不用我说了吧。