java - 将变量更改出 lambda java 中的 lambda 表达式范围

标签 java lambda

我有一个发送到另一个函数的 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/

相关文章:

java - 为什么程序可以在java或其他语言中准确地显示无限重复的 float

java - 错误状态 404 : origin server did not find a current representation

c# - 当每个项目可以有多个键时,是否可以对集合进行分组?

C# Lambda 返回语句问题

Java FX Platform.runLater(() -> 相当于长时间运行的任务

java - eclipse RCP : class loading problem

java - 在kafka中,当使用事务生成消息时,消费者偏移量增加了一倍

java - Jackson 在序列化时触发 JPA Lazy Fetching

java - Java如何知道使用lambda表达式时应该重写哪个方法

java - Lambda 的行为与匿名内部类不同