当前位置: 首页 > 编程笔记 >

Java中如何使用lambda访问封闭类中的变量

宋育
2023-03-14
本文向大家介绍Java中如何使用lambda访问封闭类中的变量,包括了Java中如何使用lambda访问封闭类中的变量的使用技巧和注意事项,需要的朋友参考一下

Lambda 表达式的封闭范围定义的变量可以在 lambda 表达式中访问。Lambda 表达式可以访问实例、静态变量和由封闭类定义的方法。它还可以访问“ this”变量(隐式和显式) ,该变量可以是封闭类的实例。Lambda 表达式还设置实例或静态变量的值。

示例

interface SimpleInterface {
   int func();
}
public class SimpleLambdaTest {
   static int x = 50;
   public static void main(String[] args) {
      SimpleInterface test = () -> x;     //使用Lambda访问静态变量     
      System.out.println("访问静态变量 'x': " + test.func());

      test = () -> {     //使用Lambda将值设置为变量      
          return x = 80;
      };
      System.out.println("设定值 'x': " + test.func());
   }
}

输出结果

访问静态变量 'x': 50
 'x'设定值: 80
 类似资料:
  • 问题内容: 我有一些这样的代码: 而且我收到警告,因为使用in闭包是可变变量,所以可能会引起问题。 我该如何避免呢?我的意思是我如何将不可变变量发送给回调,因为这是一个for循环,并且我无法更改代码?换句话说,如何将参数传递给闭包? 问题答案: 您需要创建一个范围以使用自执行功能正确捕获。这是因为整个for循环是一个作用域,也就是说,每次循环都捕获相同的变量。因此,回调将以错误的id结尾,因为的值

  • 问题内容: 我已经看到了一些“解决方案”,但是每次的解决方案似乎都是“不要使用嵌套类,在外部定义类,然后再正常使用它们”。我不喜欢这个答案,因为它忽略了我选择嵌套类的主要原因,即拥有一个常量池(与基类相关联),该常量池可用于所有创建的子类实例。 这是示例代码: 所有类都传递一个参数,这是一个自定义的位流类。我的目的是要提供一种解决方案,该解决方案不需要我仍在ParentClass中时读取Child

  • 我在Java中的TimerTask遇到了一些问题。基本上,我试图做的是为每个会话计算一些东西,我设置一分钟的时间范围,一旦时间到了,我会提示用户输入是否启动另一个会话。以下是我尝试过的: 但是,run()中的toCont变量出现了一些语法错误。错误消息如下:“封闭范围中定义的局部变量toCont必须是final或有效final”。有什么办法可以解决这个问题吗?谢谢

  • 问题内容: 如何从匿名类的方法内部访问? 问题答案: 如何从匿名类的方法内部访问? 您只需要访问它们即可: 更重要的是:为什么这对您不起作用?

  • 想改进这个问题吗?通过编辑这篇文章添加细节并澄清问题。 我有A和B两个班: 正如您在类B中看到的,我有一个方法登录名,我在其中放入了两个变量。我想访问类A中这些变量的值。我怎么做? PS:我正在使用JAVA8,我是个新手。

  • 我的主班里有一个学生班。Student类包含Id和名称。在我的主要班级里,我正在把这三个学生加到名单上。现在我需要取名字不应该为空的第一个学生。为此,我使用了java stream()类,其中包含findFirst()方法来获取第一个匹配值。因此返回类型是可选的。 这是我写的 我该怎么整改呢?