57
|
ChandraBhan Singh · 技术社区 · 6 年前 |
![]() |
1
83
你打电话的原因
但是在lambda的例子中,您不在继承自的类中
基本上就是说,在lambda内部,你实际上在同一个范围内,就像你在lambda外部一样。如果您无法访问
|
![]() |
2
18
在第二种情况下,您将覆盖
|
![]() |
3
10
这最终是对范围的误解。 将lambda传递给线程时,并不是创建thread的子类,而是传递thread的functioninterface Runnable 调用线程的构造函数。当您尝试调用Sleep时,作用域的上下文是Runnable+您的类(如果Runnable接口有默认方法,您可以调用它们)的组合,而不是Thread。 Runnable没有定义sleep(),但线程定义了sleep()。 创建匿名内部类时,您是线程的子类,因此可以调用sleep(),因为作用域的上下文是线程的子类。
|
![]() |
4
7
你的怀疑源于对 范围 定义了一个lambda表达式和一个匿名类。下面,我将试图澄清这一点。 docs 说:
匿名类的工作方式不同。它们确实引入了一个新的范围界定级别。他们的行为很像 local class (在代码块中声明的类),尽管它们不能有构造函数。看看这是怎么回事 docs 说:
在这种情况下,匿名类的行为就像内部的本地类一样
|
![]() |
5
5
以下代码工作:
这是因为
|
![]() |
6
4
我喜欢被提供和接受的答案,但用更简单的话来说,你可以这样想
如果是AIC,
|
![]() |
7
2
相当于
所以编译器不会进行查找
|
![]() |
8
-2
|
![]() |
user107586 · 如何处理等待句柄不会导致无限循环? 7 月前 |
![]() |
ron burgundy · 获取-释放语义是否跨线程传递?[副本] 8 月前 |
![]() |
BenjiFB · C#内存缓存:在一次操作中追加到列表? 8 月前 |
![]() |
András Takács · Python多线程问题 1 年前 |
|
András Takács · Python多线程错误 1 年前 |