Мне кажется, я вижу твою проблему. Мне жаль, что другие ответы не касаются этого.
Итак, у Java есть эта идея, которая разделяется некоторыми другими языками: просто то, что что-то является допустимым выражением , не означает, что эта вещь сама по себе является действительным выражением .
Например, этот код будет жаловаться аналогично:
Integer i = 4;
i+3; // this line gives a compilation error
И, тем не менее, очевидно, что я могу использовать i+3
(распаковать!) В другом месте, чтобы обозначать "7
":
System.out.println(i+3); // this is fine
Это немного сбивает с толку, потому что в отличие от некоторых языков, которые имеют это различие выражения / оператора, java позволяет вам использовать любой вызов метода - независимо от того, возвращает он значение или нет - в качестве оператора. Однако большинство java-операторов сами по себе не формируют правильное утверждение.
Аналогично, это не компилируется:
Integer i = 4;
i; // this line gives a compilation error
Подробную информацию смотрите в http://java.sun.com/docs/books/jls/second_edition/html/statements.doc.html#32588