I have following code,
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 ;
}
}
which executes properly without the marked line. However, gives error ".class expected" with marked line. Can anybody help me what is the problem and how to solve this ?
Basically this is a simplified version of your problem:
if (condition)
int x = 10;
You can't do that in Java. You can't use a variable declaration as the single statement in an if
body... presumably because the variable itself would be pointless; the only purpose would be for the side effect of the expression used for the assignment.
If you really want the pointless declaration, use braces:
if (condition) {
int x = 10;
}
It's still useless, but at least it will compile...
EDIT: Responding to the comment, if you need to use the variable outside the if
block, you need to declare it before the if
block, and also make sure it's initialized before you read the value. For example:
// 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
Or:
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
Or possibly use a conditional expression:
long[] lls = ll == 100 ? a1.val(ll) : null;
As Jon Skeet points out, this (1):
if(ll == 100)
long lls [] = a1.val(ll);
won't compile because it's using a declaration as a single statement.
This (2):
if(ll == 100){
long lls [] = a1.val(ll);
}
will compile because the compiler doesn't really care what's inside the {}
-- it's a block, as far as the if
is concerned. It's also pointless because it's equivalent to (3):
if(ll == 100)
a1.val(ll);
However, when I see (1), it usually looks like what was actually meant is:
long lls [];
if(ll == 100)
lls = a1.val(ll);
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With