Java uni catch的异常参数可能是最终的?
来自 uni catch子句的异常参数从不隐式 已宣布为最终结果,但实际上可能是最终结果Java uni catch的异常参数可能是最终的?,java,javadoc,java-8,Java,Javadoc,Java 8,来自 uni catch子句的异常参数从不隐式 已宣布为最终结果,但实际上可能是最终结果 这里可能暗示什么。请举例说明。JLS8在第节中说明: 如果局部变量或方法、构造函数、lambda或异常参数未声明为final,但从未作为赋值运算符§15.26的左操作数或前缀或后缀递增或递减运算符§15.14、§15.15的操作数出现,则该局部变量或方法、构造函数、lambda或异常参数实际上是final 在下面的示例中,变量e是有效的final。这意味着它可以用于lambda表达式和匿名内部类: 在下面的
这里可能暗示什么。请举例说明。JLS8在第节中说明: 如果局部变量或方法、构造函数、lambda或异常参数未声明为final,但从未作为赋值运算符§15.26的左操作数或前缀或后缀递增或递减运算符§15.14、§15.15的操作数出现,则该局部变量或方法、构造函数、lambda或异常参数实际上是final 在下面的示例中,变量e是有效的final。这意味着它可以用于lambda表达式和匿名内部类: 在下面的示例中,变量e不是有效的final,因为有一个赋值给该变量。这意味着,它不能在lambda表达式和匿名内部类中使用:
JLS8在第节中说明: 如果局部变量或方法、构造函数、lambda或异常参数未声明为final,但从未作为赋值运算符§15.26的左操作数或前缀或后缀递增或递减运算符§15.14、§15.15的操作数出现,则该局部变量或方法、构造函数、lambda或异常参数实际上是final 在下面的示例中,变量e是有效的final。这意味着它可以用于lambda表达式和匿名内部类: 在下面的示例中,变量e不是有效的final,因为有一个赋值给该变量。这意味着,它不能在lambda表达式和匿名内部类中使用:
我想你应该看看effectivefinal的定义。@SotiriosDelimanolis我在谷歌上发现,没有改变的变量是effectivefinal,但当我阅读我在上面找到的Java文档时,我被弄糊涂了,异常参数可能是unicatch块的effectivefinal。我无法想象这意味着什么。在任何参数都可能是有效最终的意义上,它可能是有效最终的。我想你应该看看有效最终的定义。@SotiriosDelimanolis I google发现没有改变的变量实际上是最终的,但当我阅读我发现上面语句的Java文档时,我感到困惑,异常参数可能实际上是uni catch块的最终参数。我无法想象这意味着什么。它可能实际上是最终的,因为任何参数都可能是最终的。
try {
throw new RuntimeException("foobar");
} catch (RuntimeException e) {
Runnable r = () -> { System.out.println(e); };
r.run();
}
try {
throw new RuntimeException("foo");
} catch (RuntimeException e) {
e = new RuntimeException("bar", e);
Runnable r = () -> { System.out.println(e); }; // ERRROR
r.run();
}