четверг, 26 марта 2015 г.

Java хит-парад

10 вещей, о которых мы не знали.

13 комментариев:

  1. О которых ВЫ не знали. Есть один новый прикол, но, в остальном, перепевки Блоха, показывающие, что автор его не читал.
    1. Заголовок про Java, а пример про JVM
    2. По сути тоже про JVM
    3. Чуть ли не с момента создания Java
    4. Тоже давно известно
    5. Вроде у Блоха видел, мелочь
    6. Ничего нового - reflection опасная штука
    7. Тоже испокон веков, как и 3
    8. С какого он называет generics алиасами к типам?
    9. Путает generics и templates из C++
    10. А вот про & для типов я раньше не слышал

    ОтветитьУдалить
    Ответы
    1. Раз есть пункт 10, значит, ВЫ тоже не знали :)
      А вот про пункт 9 можешь подробнее? С какого боку тут C++?

      Удалить
    2. Насчёт, кстати, "ничего нового". Означает ли это, что всего это помнишь и знаешь на кончиках пальцев, когда пишешь? Спроси многих джавистов про п.6 - услышишь, я думаю, интересное.

      Удалить
    3. Что можно интересного услышать про закешированные в JDK обёртки примитивных типов? То, что часть уникальны, а часть - нет? Ну было так сделано для быстродействия при минимизации памяти. То, что с помощью reflection без установленного SecurityManager можно всё сломать? Ну это и ежу понятно.

      Удалить
    4. Ну не на кончиках пальцев, но на минутку призадуматься заставил только п.4, так как обёртки примитивных типов для вычислений используются чрезвычайно редко. А ведь для них сделаны конвертации, как и для обычных примитивных типов. Если в примере заменить обёртки на другие классы, то код просто не скомпилируется.

      Удалить
    5. Про п.9 я может что и напутал насчёт templates, но generics в Java не доступны в runtime, кроме как через декларации классов и методов. Обратная совместимость тому виной...

      Удалить
    6. http://malenkov.blogspot.ru/2008/03/java-puzzle-78-reflection-infection.html
      Да и вообще все puzzlers можешь посмотреть...

      Удалить
    7. А теперь, дядька СЭМ, перечитай свои ответы и попробуй прикинуть, какое количество программирующего народа, когда пишет код, знает обо всём этом. Так что, насчёт "ежу понятно" - так это понятно уже постфактум, под отладчиком. И хорошо, если на тестировании, а не у конечного пользователя нашлось.
      Мне-то что, я на Java на пишу, и JLS и вот это всё меня не сильно касается.

      Удалить
    8. Ну, у меня опыт большой, за других - не скажу. Хотя всегда и всем говорю, что Блоха надо прочитать от и до, благо язык у него не очень сложный и примеры понятные.

      Для ежей, как говорится, чёрным по белому написано:
      Reflection is powerful, but should not be used indiscriminately. This is a relatively advanced feature and should be used only by developers who have a strong grasp of the fundamentals of the language.
      http://docs.oracle.com/javase/tutorial/reflect/

      Удалить
    9. А теперь берем твою цитату (Reflection is powerful, but should not be used indiscriminately. This is a relatively advanced feature and should be used only by developers who have a strong grasp of the fundamentals of the language.) и пытаемся замапить на пример с хабра. Что получаем?

      Удалить
    10. Тут я не понял, что ты хочешь сказать.

      Удалить
    11. Всё просто: во первых, не все код пишущие способны мотивированно объяснить (а ещё лучше, доказать) смысл используемых языковых конструкций ("не знал, что говорил прозой"), а во вторых многие просто не знают.
      Для меня безусловная полезность такого рода статей - в самопроверке. Смогу ли сразу, без размышления, определить проблему в гладком на первый взгляд коде; и смогу ли сам всегда писать правильно.

      Удалить
    12. С этой стороны статья полезная, но с другой точки зрения она показывает, что автор что-то где-то слышал, но есть ещё 100 вещей о Java, которые он не знает - puzzlers.

      Удалить

Спутник взлетает. Первая ступень отработала.

 И, кажется, неплохо: Посмотрим, что будет когда отработает вторая.