您只需将readln2的值复制到最终变量中即可:

final String labelText = readln2 ;

Button button = new Button("Click the Button");

button.setOnAction(e -> l.setText(labelText));

如果你想每次都获取一个新的随机行,你可以缓存感兴趣的行并在事件处理程序中选择一个随机行:

Button button = new Button("Click the button");

Label l = new Label();

try {

List lines = Files.lines(Paths.get("/temp/mantra.txt"))

.skip(low)

.limit(high - low)

.collect(Collectors.toList());

Random rng = new Random();

button.setOnAction(evt -> l.setText(lines.get(rng.nextInt(lines.size()))));

} catch (IOException exc) {

exc.printStackTrace();

}

// ...

或者您可以在事件处理程序中重新读取该文件.第一种技术(更快)但可能消耗大量内存;第二个不会将任何文件内容存储在内存中,但每次按下按钮时都会读取文件,这可能会使UI无响应.

你得到的错误基本上告诉你出了什么问题:你可以从lambda表达式中访问的唯一局部变量是final(声明为final,这意味着它们必须被赋值一次)或“有效final”(这基本上意味着)你可以让它们最终完成而不需要对代码进行任何其他更改).

您的代码无法编译,因为readln2被多次赋值(在循环内),因此无法将其声明为final.因此,您无法在lambda表达式中访问它.在上面的代码中,lambda中访问的唯一变量是l,lines和rng,它们都是“有效的最终”,因为它们只被赋值一次.(你可以将它们声明为final,代码仍然可以编译.)

java lambda 变量_java – 从lambda表达式引用的局部变量必须...相关推荐

  1. java lambda 实现_Java 8 Lambda实现原理分析

    PDF文档已上传Github 为了支持函数式编程,Java 8引入了Lambda表达式,那么在Java 8中到底是如何实现Lambda表达式的呢? Lambda表达式经过编译之后,到底会生成什么东西呢 ...

  2. java lambda 实现_Java 8 Lambda实现原理分析(转载)

    原文出处:http://www.cnblogs.com/WJ5888/p/4618465.html 为了支持函数式编程,Java 8引入了Lambda表达式,那么在Java 8中到底是如何实现Lamb ...

  3. java循环变量_Java初学——Java入门变量 常量选择循环结构

    一.初识java 1.jdk的介绍 下载安装jdk 安装后会存在默认的安装路径 bin 目录:存放编译,运行 Java 程序的可执行文件 lib 目录:存放 Java 的类库文件 jre 目录:存放 ...

  4. java环境变量_java环境变量

    1. PATH环境变量.作用是指定命令搜索路径,在shell下面执行命令时,它会到PATH变量所指定的路径中查找看是否能找到相应的命令程序.我们需要把 jdk安装目录下的bin目录增加到现有的PATH ...

  5. java lambda使用_Java 8 Lambda表达式的使用

    lambda表达式允许你通过表达式来代替功能接口.lambda表达式就和方法一样,它提供了一个正常的参数列表和一个使用这些参数的主体(body,可以是一个表达式或一个代码块). Lambda表达式还增 ...

  6. java nextintln_java – 从lambda表达式引用的局部变量必须是final或者有效的final

    我有一个JavaFX 8程序(适用于JavaFXPorts交叉平台),它实际上是为了做我想做的事情,但却是一步之遥.程序读取文本文件,对行进行计数以建立随机范围,从该范围中选取一个随机数并读取该行以进 ...

  7. java基础变量_Java基础语法之变量和常量

    上行没有"{"时,下行代码与上行首字母对齐 标识符 概述 在Java中对变量.常量.函数和语句块都是有名字的,他们的名字统称为Java标识符.是为类.对象.方法.变量.接口和自定义 ...

  8. java 内部变量_java 中的内置数据类型

    1,  基本数据类型 Java是强类型语言, 对于每一种数据都定义了类型,基本数据类型分为数值型,字符型,布尔型.数值型又分为了整型和浮点型. 整型又分为byte, int, short long. ...

  9. java块语句_Java运算符、表达式、语句块

    一.运算符 在java中用于程序计算的操作i发统称为运算符,运算符分为如下几类: 1.算术运算符 算术运算符 说明 + 加号两边是数值,可以运算,如果一边存在字符串,则当作连接符 a+b - 两个数相 ...

最新文章

  1. RedisManager使用手册(二) -- 配置文件详解
  2. 蓝桥杯JAVA省赛2013-----B------3(振兴中华)
  3. php多线程 static变量,private static和public static的比较:多线程间
  4. C++中全局变量的使用
  5. iText报表Java_(例)Java生成PDF报表 iText
  6. scipy.signal.find_peaks(峰值检测)
  7. HttpMessageConvert
  8. php的异步非阻塞swoole模块使用(一)实现简易tcp服务器--服务端
  9. 算法导论(原书第3版) 目录
  10. lena图的直方图以及与其他图像的直方图匹配
  11. UiPath-压缩解压缩文件
  12. Seaborn 绘图中设置字体及大小
  13. python项目实战:免费下载某平台任意付费音乐
  14. 基于yolov5的目标检测和单目测距
  15. 强化学习: 贝尔曼方程与马尔可夫决策过程
  16. 操作系统内核框架图整理
  17. 关于ERP系统提前期运算逻辑的三点介绍(转)
  18. Django的CBV和FBV
  19. day01-初识计算机
  20. java scope是什么意思_Tutorial:Javascript中的作用域(scope)是什么?(一)(试用FIREBUG了解)...

热门文章

  1. Win10电脑定时关机无效怎么办
  2. java反射获取实体类_java 反射获取类对象的三种方式
  3. 常见移动机器人多角度对比分析(图片版)
  4. cfiledialog 保存 扩展名_吃不完的红薯很难保存?教你一招,放1年不烂不发芽,简单实用...
  5. DP4 最小花费爬楼梯
  6. 洛谷——P2393 yyy loves Maths II
  7. { parser: “babylon“ } is deprecated; we now treat it as { parser: “babel“ }.
  8. Eigen教程(6)之高级初始化方法
  9. 使用这个,自定义AlertDialog在你手里都不是问题
  10. python中encode()函数的用法