Блог Java разработчика

Здесь буду публиковать свои размышления на тему IT и не только. Для интересующихся java разработчиков у нас есть группа в контакте: https://vk.com/java_blogger

Подкаст The Tech Guy для изучающих английский IT специалистов

17 августа 2017, 23:39

В целях изучения английского, начал слушать подкаст Leo Laporte — The Tech Guy
Ссылочка: http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewPodcast?id=73802706

Подкаст о компьютерах, технологиях и Интернет сервисах.

Баг в компиляторе JDK8 ?

27 января 2017, 0:16

Наткнулся на неочевидное поведение компилятора java при написании следующего кода:

public class CompilerBug {
    public static void main(String[] args) {
        
        final Map<Integer, Optional<Character>> collect = Stream.of("one", "two", "three", "four")
                .collect(
                        Collectors.groupingBy(
                                String::length,
                                Collectors.mapping(
                                        s -> s.charAt(0),
                                        Collectors.minBy(Comparator.naturalOrder())
                                )
                        )
                );
        System.out.println(collect);
    }
}

Появляется ошибка:

Error:(13, 35) java: no suitable method found for groupingBy(String::length,java.util.stream.Collector<java.lang.Object,capture#1 of ?,java.util.Optional<T>>)
    method java.util.stream.Collectors.<T,K>groupingBy(java.util.function.Function<? super T,? extends K>) is not applicable
      (cannot infer type-variable(s) T,K
        (actual and formal argument lists differ in length))
    method java.util.stream.Collectors.<T,K,A,D>groupingBy(java.util.function.Function<? super T,? extends K>,java.util.stream.Collector<? super T,A,D>) is not applicable
      (inferred type does not conform to upper bound(s)
        inferred: java.lang.Object
        upper bound(s): T,java.lang.Comparable<? super T>,java.lang.Object)
    method java.util.stream.Collectors.<T,K,D,A,M>groupingBy(java.util.function.Function<? super T,? extends K>,java.util.function.Supplier<M>,java.util.stream.Collector<? super T,A,D>) is not applicable
      (cannot infer type-variable(s) T,K,D,A,M
        (actual and formal argument lists differ in length))

Решается с помощью

Collectors.minBy((Comparator<Character>)Comparator.naturalOrder()).

Реальная причина возникновения мне пока неизвестна.

UPDATE:
Это был баг в IDEA.

Джоэл. И снова о программировании

30 марта 2016, 23:05

Сегодня завершил чтение очередной книги Джоела.
Книга представляет собой подборку статей, опубликованных на сайте www.joelonsoftware.com
В книге затронуты вопросы найма лучших разработчиков, управления IT проектом, управление ценой программного продукта и даже сегментирование.

В целом, рекомендую всем, занятым в IT индустрии, книга легко читается, много юмора, оставляет приятные впечатления.
Но ожидать сенсации от книги не стоит.

Чтобы окончательно определиться я предлагаю вам прочесть статью из книги:
«Опасности обучения на Java»

Objective-C и ios. Хорошо, хоть и не привычно :)

16 июня 2015, 0:41

Я мобильные платформы изучаю недавно, но буду описывать свои ощущения ниже.
Разница для меня по сравнению с Java/Android и Intellij Idea:

xCode 6.3.2:

  • Горячая клавиша для дублирования строки отсутсвует; (в AppCode есть, кстати);
  • Фреймворк (social.framework) для работы twitter и facebook из коробки,
    нужно только подключить к проекту (небольшая плюшка, конечно, но все же);
  • От IDEA, конечно, далековато :) Но свои фишки есть. Пока не очень понял почему, но неиспользуемые классы никак средой не обрабатываются, поэтому их нужно сразу задействовать в реальном коде, тогда можно увидеть ошибки компиляции хотя бы, возможно я не прав.
  • В целом больше рабоыт мышкой и меньше горячих клавиш — такое впечатление произвела на меня среда.
  • Генератора для set и get методов не обнаружил, но если пользоваться свойствами (А ими нужно пользоваться!), то они создаются автоматически.

iOs:

  • View тоже хранится в XML, как и в Android;
  • UIView в IOS parent всех компонент, как View в Android;
  • Симулятор работает гораздо быстрей, чем на Android;
  • Начиная с IOS 9 не нужен сертификат разработчика для загрузки на устройство;

Objective-C:

  • Objective-C надмножество языка С, но при этом язык объектно-ориентированный;
  • Посылаем сообщения, а не вызываем методы; [разница не только в терминах, но и в
    стабильности работы при вызове метода у nil объекта];
    Мы можем послать nil объекту сообщении о вызове селектора, и приложение останется работать корректно.
  • Вместо this — используем self, вместо null — nil;
  • Множественного наследования нет, но оно есть! :)
  • Вместо instanceof есть селектор isKindOfClass, для проверки типа в runtime;
    Для проверки существования метода также есть свой селектор.
  • В последней версии языка есть ARC, котоырй занимается тем, что считает ссылки, поэтмоу за подсчетом ссылок теперь можно больше не следить!
  • Протоколы — похожи на интерфейсы в Java, но есть необязательные методы.@optional Причем
    протоколы могут наследовать друг друга.
  • Есть обертки для примитных типов NSNumber, NSValue;
  • Есть enum! Структуры также присутствуют, но совершенно не обязательно их создавать, можно использовать классы.
  • NsMutableArray, NsDictionary — теже коллекции — аналоги List, Map, Set
  • Пакетов или других анлогов для namespaces нет, поэтому Apple рекомендует для пользовательских классов добавлять 3 заглавных букв, типа REAHuman.m;
  • Пример функции класса (он же — статический метод) — [UIColor blackColor];
  • В Objective-C нет родительского объекта, но в фреймворке Cocoa есть родительский
    объект NSObject. (Вспоминаем Object в Java и System.Object в C#);
  • Аналог toString — метод description класса NSObject, который отвечает за строковое представление объекта.
  • Автоматически создаются getters и setters для свойств класса; (теперь даже synthesize указывать не нужно);
  • Строки неизменяемые (сходство с Java), но указывать их нужно в формате @«строка», иначе это будут строки из C, которые на самом деле массив char[].

Мой сетап на OSX

15 июня 2015, 12:02
  1. Intellij Idea — люблю я эту IDE, спасибо Jetbrains за неё.
  2. Evernote — один из главных рабочих инструментов, все, что нужно мне сохранить, находится там.
  3. Terminal — в OS X есть удобная консоль, котоаря после терминала в Windows просто волшебная!
  4. Dropbox — здесь лежит мой git репозиторий и большие файлы для синхронизации между рабочим и домашним компьютером.
  5. Spotlight — все приложения запускаю через него, а также ищу контакты в адресной книге.
  6. Mail — вполне устраивает для сборщика почты из 3 моих ящиков.
  7. Sublime text — для любых других файлов, которые я не открываю в IDE.
  8. Calendar — в него вбил все даты рождения, которые мне важно помнить, доволен, как слон :)