• Зачем нужен Optional и почему над null нельзя выполнить те же действия?

    @koperagen
    Вы и так можете проверить проверить ссылку на null, без каких-то дополнительных методов и сущностей. Optional здесь явным образом сообщает, что результат метода может существовать (значение), либо не существовать (null) и не даёт получить значение, не сделав выбор, как обработать ситуацию с его отсутствием. Кроме обычного get() есть ещё методы getOrElse(), позволяющий указать значение по умолчанию, getOrNull().

    Ещё бывает удобно сначала выполнить цепочку преобразований над Optional при помощи метода map(), а в конце получить значение любым удобным способом и дальше работать с "чистым" объектом ожидаемого типа.

    В kotlinе (раз язык не принципиален) на помощь с борьбой с NPE приходят nullable типы. Каждый класс порождает два типа, к примеру для класса Person это будет Person и Person?. В сигнатурах методов можно явно указать, какой из типов допустим. Если Person?, то компилятор вынудит вас обработать случай с приходом null. Так же вы не сможете вернуть из метода null, если объявили в качестве результата тип Person. Программа просто не скомпилируется. Все ради того, чтобы null не приходил из неожиданных мест, обрабатывался и не ронял программу.
    Ответ написан
    Комментировать
  • Возможна ли обработка на клиенте Spring Framework?

    @koperagen
    Если не хотите изучать новые языки, возможно вам подойдет Vaadin. Этот фреймворк позволяет писать web приложение полностью на Java, в том числе исполнять какую-то логику на клиенте. В Spring, насколько мне известно, такой возможности нет
    Ответ написан
    1 комментарий
  • Как изучать java после обычного курса SoloLearn?

    @koperagen
    Я начинал изучать Java по книге Head first Java, есть русскоязычное издание. Книга+практика+изучение содержимого стандартной библиотеки помогает понять, для решения каких задач не нужно изобретать свой велосипед. Очень удобно это делать в IDE (В моем случае Intellij idea).
    Для дальнейшего развития могу предложить книгу из той же серии - Head First Design Patterns. Плюс для вас в том, что примеры в ней тоже на Java. Но лично мне удалось хотя бы что-то в ней понять только спустя год после первого прочтения. В книге описаны многие принципы проектирования программ в объектно-ориентированных языках, т.е. идеи уже более общие, применимые не только в Java.
    Ответ написан
    Комментировать
  • Как в java swing обрабатывать 3 типа нажатий jButton?

    @koperagen
    Вам нужен не ActionListener, а MouseListener. https://docs.oracle.com/javase/7/docs/api/java/awt...
    Ответ написан
    Комментировать
  • Почему столько восторгов вокруг типизации? По-моему без нее намного проще, не?

    @koperagen
    Зная тип переменной среда разработки может подсказать:
    1. можно ли присвоить ей результат функции
    2. можно ли её передать как аргумент функции
    3. к каким методам и свойствам можно обратиться

    В некоторых языках, например Kotlin, система типов позволяет отслеживать null значения и обрабатывать их в коде.
    Более того, в большинстве статически типизированных языков есть возможность вывода типа исходя из выражения. Т.е. можно писать тип только там, где это действительно необходимо. Отличие от JS в том, что типы все равно отслеживаются на этапе компиляции и нельзя присвоить переменной значение другого типа.
    Запись вида
    val a = 2 + 3
    Эквивалентна записи
    val a : Int = 2 + 3
    Это приведет к ошибке:
    val a = 2 + 3
    a = "Hello"

    Все это помогает переместить целые категории ошибок из времени исполнения в этап компиляции (Для IDE и вовсе этап написания кода)
    Ответ написан
    2 комментария