你能在初始化时实现一个接口吗?
Can you implement an interface during initialization?
我在阅读 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();
}
}
我的问题是为什么他们在创建 class 时没有实现 Runnable?由于他们在初始化 r1 时覆盖了 运行 方法,因此是否负责实现?
是的,这在 Java 中称为匿名 class。
https://docs.oracle.com/javase/tutorial/java/javaOO/anonymousclasses.html
您可以在使用new
运算符时实现一个接口或扩展一个class,这将创建您当时定义的未命名subclass 的新实例。它主要用于编写要在另一个线程中使用或作为回调的代码,因为您只会获得一个实例。
Java 8 中的新 lambda 语法取代了匿名 classes 用于具有单一方法的接口,例如 Runnable 或 java.util.function 中的接口。这就是他们在示例中展示的内容。
我在阅读 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();
}
}
我的问题是为什么他们在创建 class 时没有实现 Runnable?由于他们在初始化 r1 时覆盖了 运行 方法,因此是否负责实现?
是的,这在 Java 中称为匿名 class。
https://docs.oracle.com/javase/tutorial/java/javaOO/anonymousclasses.html
您可以在使用new
运算符时实现一个接口或扩展一个class,这将创建您当时定义的未命名subclass 的新实例。它主要用于编写要在另一个线程中使用或作为回调的代码,因为您只会获得一个实例。
Java 8 中的新 lambda 语法取代了匿名 classes 用于具有单一方法的接口,例如 Runnable 或 java.util.function 中的接口。这就是他们在示例中展示的内容。