我有以下代码,
class AA {
public static void main(String[] args) {
long ll = 100 ;
AA1 a1 = new AA1() ;
if(ll == 100) // Marked line
long lls [] = a1.val(ll);
}
}
class AA1 {
public long [] val (long ll1) {
long [] val = new long []{1 , 2, 3};
return val ;
}
}
在没有标记线的情况下正确执行。但是,会出现错误" .class expected"标有线。任何人都可以帮我解决问题以及如何解决这个问题?
答案 0 :(得分:9)
基本上这是您问题的简化版本:
if (condition)
int x = 10;
你不能用Java做到这一点。您不能将变量声明用作if
正文中的单个语句...大概是因为变量本身没有意义;唯一的目的是用于赋值的表达式的副作用。
如果确实想要无意义的声明,请使用大括号:
if (condition) {
int x = 10;
}
它仍然没用,但至少它会编译......
编辑:响应评论,如果您需要在if
块之外使用变量 ,则需要在 {{1}之前声明它阻止,并确保在读取值之前初始化它。例如:
if
或者:
// Note preferred style of declaration, not "long lls []"
long[] lls = null; // Or some other "default" value
if (ll == 100) {
// I always put the braces in even when they're not necessary.
lls = a1.val(ll);
}
// Now you can use lls
或者可能使用条件表达式:
long[] lls;
if (ll == 100) {
lls = a1.val(ll);
} else {
// Take whatever action you need to here, so long as you initialize
// lls
lls = ...;
}
// Now you can use lls
答案 1 :(得分:2)
Jon Skeet指出,这(1):
if(ll == 100)
long lls [] = a1.val(ll);
将无法编译,因为它使用声明作为单个语句。
这(2):
if(ll == 100){
long lls [] = a1.val(ll);
}
将编译,因为编译器并不真正关心{}
中的内容 - 就if
而言,它是一个块。它也毫无意义,因为它等同于(3):
if(ll == 100)
a1.val(ll);
然而,当我看到(1)时,它通常看起来实际上意味着:
long lls [];
if(ll == 100)
lls = a1.val(ll);