4

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 ?

4

2 回答 2

9

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;
于 2012-04-25T22:16:28.107 回答
2

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);
于 2012-04-25T22:25:25.060 回答