Lambda 方法中的引用与其某个参数相同。引用引用的参数是否正确?

Lambda 方法中的引用与其某个参数相同。引用引用的参数是否正确?,lambda,scope,Lambda,Scope,在oracle lambda表达式教程中,似乎是说x指的是方法的封闭类中的成员,但由于该方法的参数引用与x相同,我认为它指的是局部参数,而不是封闭类的成员 例如,lambda表达式直接访问methodInFirstLevel方法的参数x。要访问封闭类中的变量,请使用关键字this。在本例中,this.x引用成员变量FirstLevel.x 但接下来的教程似乎立即自相矛盾: 但是,与局部类和匿名类一样,lambda表达式只能访问封闭块的局部变量和参数,这些变量和参数是final或实际上是final

在oracle lambda表达式教程中,似乎是说
x
指的是方法的封闭类中的成员,但由于该方法的参数引用与
x
相同,我认为它指的是局部参数,而不是封闭类的成员

例如,lambda表达式直接访问methodInFirstLevel方法的参数x。要访问封闭类中的变量,请使用关键字this。在本例中,this.x引用成员变量FirstLevel.x

但接下来的教程似乎立即自相矛盾:

但是,与局部类和匿名类一样,lambda表达式只能访问封闭块的局部变量和参数,这些变量和参数是final或实际上是final。例如,假设在methodInFirstLevel定义语句之后立即添加以下赋值语句:

由于这个赋值语句,变量FirstLevel.x实际上不再是final


什么?该示例方法中的赋值是
x=
not
this.x=
,那么该赋值对
FirstLevel.x
有什么影响呢?

根据我收集的信息,教程说示例lambda函数中的
x=99
而不是访问类成员变量。它试图修改函数参数,该参数必须是final,因此,该操作无效。
x=99
会产生错误


教程后来说,它影响了成员变量
FirstLevel.x
。这是不正确的,因为
x=99
只能引用函数参数。另一方面,
this.x
会引用
FirstLevel.x

,作为一个一般的东西,传递给函数的是引用。 然后,在函数中为局部变量分配此引用。它通常不会对函数外部的变量进行任何更改,除非您使用某种形式的全局变量进行更改。
名称的重合不会导致任何问题,因为它们指向不同的内存位置。

x
参数类似于一个局部变量,其范围是方法。你的问题是什么?我刚刚编辑过。这有助于澄清我的问题吗?我对引用的方法中的赋值如何影响
FirstLevel.x
而不是参数
x
感到困惑。我认为教程中这样说是不对的。我的问题在于赋值影响的是哪个成员。我理解他们所说的“最终有效”如果你是波西米亚人,请告诉我你是否认为甲骨文在说这句话时犯了错误。我和这里的另一个人认为这是一个打字错误,但我只是想确定一下。您的确认将证实meI相信教程是错误的。那么为什么教程说示例方法中的赋值导致封闭类变量不再是有效的final?我知道方法的参数和封闭类成员是两个不同的内存位置,我不知道这个示例方法中的赋值会如何影响封闭类成员
FirstLevel.x
,但为什么会这样说由于这个赋值语句,变量FirstLevel.x不再是有效的final。“紧接着示例方法
FirstLevel.x
是类成员变量,我现在明白你的意思了。据我所知,教程是不正确的。我认为示例方法根本不会影响
FirstLevel.x
。我认为这只会导致参数
x
不再成为最终参数。我所能猜测的只是符号
FirstLevel.x
可能是引用方法参数的某种独特方式?我同意,
x=99
没有引用
FirstLevel.x
。我不知道他们是否试图通过说
FirstLevel.x
来引用函数参数,但我高度怀疑他们是这样的,因为这会令人难以置信地困惑。你认为这是打字错误吗?我就是这么想的
void methodInFirstLevel(int x) {
    x = 99;
    // ...
}