我有一个发送到另一个函数的 lambda 函数,我想更改在 lambda 中在 lambda 范围之外声明的变量。
WebElement textArea ;
BrowserToucher.clickOnWebElement(() -> {
WebElement convPopupOrCard = findElementBy(driver,
conversationCardOrPopup);
return textArea = findSubElementBy(driver, convPopupOrCard,
CardAndPopupTextArea);
}, driver);
BrowserToucher.sendKeys(textArea, driver, text);
我需要更改 labmda 中的“textArea”变量,以便我可以在最后一行使用它的值。
我找到的唯一解决方案是将“textArea”设置为大小为 1 的数组。 但我真的不明白为什么它有效。 如果有人可以向我解释这一点,我会很高兴。 谢谢!!
最佳答案
The only solution i've found is to make 'textArea' an array in size of 1 But I don't really understand why it works.
它之所以有效,是因为捕获的数组本身是最终或有效最终(任何其值不会改变的变量)。
只要捕获的变量是最终或有效最终,更改数组的内容是完全可以的并且是允许的。
当然,这样的代码不是线程安全的。因此,理想情况下,在使用此技巧之前您应该三思而后行。
关于java - 将变量更改出 lambda java 中的 lambda 表达式范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50831373/