我正在阅读Oracle的一个lambda表达式教程,并且遇到了以下代码:
http://www.oracle.com/webfolder/technetwork/tutorials/obe/java/Lambda-QuickStart/index.html
public class RunnableTest {
public static void main(String[] args) {
System.out.println("=== RunnableTest ===");
// Anonymous Runnable
Runnable r1 = new Runnable(){
@Override
public void run(){
System.out.println("Hello world one!");
}
};
// Lambda Runnable
Runnable r2 = () -> System.out.println("Hello world two!");
// Run em!
r1.run();
r2.run();
}
}
我的问题是为什么在创建课程时他们没有实现Runnable?由于它们在初始化r1时会覆盖run方法,这是否会影响实现?
答案 0 :(得分:2)
是的,这在Java中称为匿名类。
https://docs.oracle.com/javase/tutorial/java/javaOO/anonymousclasses.html
使用new
运算符时,可以实现接口或扩展类,这将创建您当时定义的未命名子类的新实例。它主要用于编写要在另一个线程中使用的代码或作为回调,因为您只获得一个实例。
Java 8中的新lambda语法用单个方法替换接口的匿名类,例如Runnable或java.util.function中的接口。这就是他们在示例中展示的内容。