背景
在很多其他语言中,函数是一等公民。例如 JavaScript 中,函数(Function)和字符串(String)、数字(Number)、对象(Object)等一样是一种数据类型。可以这样定义函数:
var myFunction = function () {
doSomething();
};
也可以将函数作为参数:
setTimeout(function() {
doSomething();
}, 1000);
在 Java 中,函数不是一等公民。如果想要像其他语言一样定义一个函数,只能通过定义一个接口来实现,例如 Runnable
。
在 Java 8 之前,可以通过匿名类的方式来创建 Runnable
:
Thread thread = new Thread(new Runnable() {
public void run() {
doSomethong();
}
});
thread.start();
Java 8 中可以通过 lambda 表达式来创建:
Thread thread = new Thread(() -> doSomethong());
thread.start();
也就是:
Runnable runnable = new Runnable() {
public void run() {
doSomethong();
}
};