• Яндекс! Спасибо за Uber

      Привет, Хабр! В этой статье хотелось бы рассмотреть поглощение Яндексом службы такси Uber с точки зрения обычного пользователя, который немного понимает в программировании и не любит грязный маркетинг.
      Читать дальше →
    • List.of() и все, все, все…

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

        На этот раз речь пойдет о нововведениях Java. А именно про ImmutableCollections. Вы наверное где-то уже использовали List.of(). Скорее всего в тестах, ибо какой-то практической ценности в этих методах я не вижу. Но даже в тестах можно наткнуться на банальные подводные камни. Банальны они по причине того, что разок прочитав их код, сразу все становится на свои места, но остается очень и очень много вопросов, почему сделанно именно так, а не по другому.

        Начнем пожалуй с интерфейса List, в котором есть статические функции of.

        Целых ОДИННАДЦАТЬ!!!


        List<E> List<E>.<E>of(E e1);  
        
        List<E> List<E>.<E>of(E e1, E e2);  
        
        List<E> List<E>.<E>of(E e1, E e2, E e3);  
        
        List<E> List<E>.<E>of(E e1, E e2, E e3, E e4);  
        
        List<E> List<E>.<E>of(E e1, E e2, E e3, E e4, E e5);  
        
        List<E> List<E>.<E>of(E e1, E e2, E e3, E e4, E e5, E e6);  
        
        List<E> List<E>.<E>of(E e1, E e2, E e3, E e4, E e5, E e6, E e7);  
        
        List<E> List<E>.<E>of(E e1, E e2, E e3, E e4, E e5, E e6, E e7, E e8);  
        
        List<E> List<E>.<E>of(E e1, E e2, E e3, E e4, E e5, E e6, E e7, E e8, E e9);  
        
        List<E> List<E>.<E>of(E e1, E e2, E e3, E e4, E e5, E e6, E e7, E e8, E e9, E e10);  
        
        List<E> List<E>.<E>of(E... elements)  
        


        Зачем же в джаве столько методов??? Долго я задавался этим вопросом, но никак не доходили руки порыться в source коде и погуглить. Сегодня таки я нашел ответ, который меня абсолютно неудовлетворил.

        The fixed argument overloaded methods are provided to save the overhead of array-allocation, initialization and garbage collection in case of vararg calls.
        Читать дальше →