作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我总是必须将我的变量重新分配给另一个标记为 final
的变量:
public void method(int myvar) {
myvar = myvar + 1;
doSomething(myvar); //I need to change myvar before the lambda
final int newvar = myvar; //this line is stupid
//could be something like:
//makefinal myvar;
open(con -> {
doOtherThing(newVar);
});
}
如果有另一种方法可以声明我的变量在 open
调用之前不会更改,那就太好了。
最佳答案
你不能。这在 JLS section 15.27.2 中明确指定:
Any local variable, formal parameter, or exception parameter used but not declared in a lambda expression must either be declared final or be effectively final (§4.12.4), or a compile-time error occurs where the use is attempted.
但是,您可以将示例重写为以下内容:
public void method(int myvar) {
final int newvar = myvar + 1;
doSomething(newvar);
open(con -> doOtherThing(newvar));
}
我们只是声明一个 final
变量 newvar
,它将被重用。
关于java - 如何在不将变量重新分配给最终变量的情况下使用 lambda?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35464385/
我是一名优秀的程序员,十分优秀!