让我们假设我们有:
final JList list = new JList(buffer.toArray());
我想这样声明一个JList,但我从SQL查询中获得缓冲区变量,所以,在try循环中。有什么方法可以使用在try/catch外部声明的变量吗?
再次,在循环或块之前声明它,正如我在另一个线程中指出的那样。
通过在try块之外声明变量,如下所示:
JList list = null;
try {
list = new JList(buffer.toArray());
} catch (SomeNastyException eekwhatthebleepwentwrong) {
// at least print some info about the exception
}
我想这可能就是你想要的:
JList list = null;
try {
...
list = new JList(buffer.toArray());
final JList finalist = list;
... instantiate anonymous class that refers to finalist
} finally {
if (list != null) {
....
}
}
或者如果final
必须是最终的,如果try/catch/finally。。。
JList list = null;
try {
...
list = new JList(buffer.toArray());
} finally {
if (list != null) {
....
}
}
final JList finalist = list;
final
只会使事情稍微复杂一些,但创建一个与非final值相同的局部final的"技巧"就足以处理它
(如果因为这个原因不需要final
修饰符,就去掉它。它只会引起问题。)