最近我在短暂的休息后再次开始使用Java进行编程,在为朋友做项目时我注意到一些奇怪的事情:看起来你不能用缩短的ifs创建对象,例如:
if( condition )
Statement statement = con.createStatement();
Run Code Online (Sandbox Code Playgroud)
(为简单起见,我将代码缩短了.)
我收到一个错误说Statement(java.sql包中的一个类)无法解析为变量,但是,如果我用括号包装代码它会工作正常.
我认为这是编译器将其转换为多行语句的一些问题,但我不确定,我想知道这种行为的原因,提前感谢!
你不能在那里声明一个变量(来自Java 8的当前错误error: variable declaration not allowed here).如果你考虑它,它是有道理的:你没有创建一个新的范围(但使用一个块),但你正在创建一种情况,有时在当前范围内,将有一个statement变量,其他时候赢得"T.例如:
if (condition)
Statement statement = con.createStatement();
// Does `statement` exist here? What would Schrodinger say?
Run Code Online (Sandbox Code Playgroud)
如果您使用块,它会澄清问题:变量存在,但仅在块内.
if (condition) {
Statement statement = con.createStatement();
// `statement` exists here
}
// `statement` does not exist here
Run Code Online (Sandbox Code Playgroud)
如果要statement存在于当前作用域中,则必须将声明与初始化分开:
Statement statement;
if (condition)
statement = con.createStatement();
Run Code Online (Sandbox Code Playgroud)
但是你遇到了statement 可能尚未初始化的问题.为避免这种情况,您有以下几种选择:
Statement statement;
if (condition)
statement = con.createStatement();
else
statement = null;
Run Code Online (Sandbox Code Playgroud)
要么
Statement statement = condition ? con.createStatement() : null;
Run Code Online (Sandbox Code Playgroud)
或者当然,只需使用块并仅statement在其中使用.FWIW - 这完全取决于你 - 我(以及许多风格指南)建议总是使用块,因为不这样做可能会在您需要时(不可避免地!)向if... 的主体添加第二个语句时引入维护问题.
| 归档时间: |
|
| 查看次数: |
92 次 |
| 最近记录: |