@FunctionalInterface
public interface Runnable {
public abstract void run();
}
public class MethodReference1 {
public static String ThreadStatus() {
System.out.println( Thread.currentThread().getName() + " is running...");
return "threadname";
}
public static void main(String[] args) {
Thread t1 = new Thread(() -> ThreadStatus());
t1.start();
}
}
在上面使用 Java 8 的示例中,ThreadStatus(( 返回一个字符串,但 Runnable 接口 "run((" 方法不返回任何值。但它仍然有效(没有编译/运行时错误(。我想知道它是如何工作的,因为根据 lamba 规范,SAM 应该具有完全相同的签名。
如果我翻转 ThreadStatus 方法不返回任何值的情况并更改函数接口方法以返回值,则会出现编译时错误。
有人可以帮助我理解这一点吗?
这是因为Thread t1 = new Thread(() -> ThreadStatus());
等效于:
Thread t1 = new Thread(new Runnable() {
@Override
public void run() {
ThreadStatus();
}
});
所以你没有从run()
那里返回任何东西.run()
只是被指示调用ThreadStatus()
方法并忽略返回值。