Обнаружил, что при декларации массивов не обязательно соблюдать классический синтаксис и компилятор разрешает ставить запятую после последнего элемента.

Версия JVM, на которой тестировал :
java version "1.6.0_16"
Java(TM) SE Runtime Environment (build 1.6.0_16-b01)
Java HotSpot(TM) Client VM (build 14.2-b01, mixed mode,sharing)

Например:


public class Test {
    public static void main(String[] args) {
        System.out.println("Test1 :");
        test1();
        System.out.println("Test2 :"test2();
    }

    static void test2() {
        for (String str : new String[] {"one""two""margic",} {
            System.out.print("{");
            System.out.print(str + " ");
            System.out.println("}");
        }
    }

    static void test1() {
        String[][] result = {{"one"}{"two"}{"magic here ->"},};
        for (String[] a : result) {
            System.out.print("{");
        }
        for (String str : a) {
            System.out.print(str + " ");
        }
        System.out.println("}");
    }
}

Вывод:

Test1 :
{one }
{two }
{magic here -> }
Test2 :
{one }
{two }
{margic }

google.com bobrdobr.ru del.icio.us technorati.com linkstore.ru news2.ru rumarkz.ru memori.ru moemesto.ru

11 Комментариев на “Запятая в декларации массивов Java. Баг или фича?”

  1. Виталий Бондарь сказал:

    А что говорит стандарт?

    Если ничего, то это явный баг синтаксического разбора :???: Можешь смело оповещать Sun о найденном баге.

  2. usix сказал:

    В .NET С# это стандарт. Как для массивов, так и для enum'ов. Причина, если не ошибаюсь, - упростить работу инструментов, генерирующих код. Что бы заморачиваться с проверками на последний элемент в коллекции.

    В JavaScript это тоже стандарт, но в IE его не реализовали. В результате самый короткий код для определение IE выглядит так: if(-[1,] {alert("Not IE!");
    http://habrahabr.ru/blogs/javascript/80333/

  3. zeroreturn сказал:

    Виталик, а Sun уже и нету :roll: Думаю unix прав, фича удобная для генераторов, да и копипастить легче в случае чего :)

  4. Виталий Бондарь сказал:

    Дима, читай - "Sun". Самих служащих вроде как не разогнали. Хотя может сильно ошибаюсь - как-то судьба Java волнует слабо :smile:

    А вот то что в стандартах уже заботятся о машинах, а не людях для меня новость. Спасибо за информацию.
    В интересное время живем, ничего не скажешь.

  5. zeroreturn сказал:

    Насчет Sun да, Oracle расшаркалась перед сообществом, что отмеценирует в их проекты больше злых, но ценных бумажек больше чем сами солнцевские.

    В слову, судьба у Java пока много радужней чем у С++0х (так и тянет вместо ++ вписать букву Д).

  6. Larin Igor сказал:

    Детство это все ?
    Обычно такими мелкими багами интересуются все нормальные ПЕРВЫЕ курсы.

  7. Rayan сказал:

    в РНР это тоже стандарт

  8. zeroreturn сказал:

    Larin Igor, ну надо же когда-то дорасти до уровня нормального первого курса.... и вот случилось! %)

  9. Larin Igor сказал:

    "ну надо же когда-то дорасти до уровня нормального первого курса.... "

    просто более старшие курсы (чем первый) понимают,
    что время - это их самый ценный жизненный ресурс и не тратят его на обсуждение таких мелочей.

    Обычно профессиональные программисты выставляют на общественное обсуждение что то существенное, например:
    «….я открыл дыру в системе безопасности J2EE и разработал рекомендации как эту дыру прикрыть..»

  10. zeroreturn сказал:

    все верно, только существенное занимает существенно больше времени. А поскольку на блоге тишина и профессиональные программисты не спешат открывать дыры в системе безопасности jee довольствуясь старыми, решил, что будет уместно сделать свежий пост постратив 10 мин своего времени наткнувшись на сабжевую фичу. Чем могу, как говориться…

  11. zeroreturn сказал:

    с другой стороны, комментарии показывают, что есть тенденция к совершенно иному использованию существующих платформ, чем канонические варианты использования, под которые эти платформы разрабатывались.





Оставте свое мнение