Ответы пользователя по тегу Java
  • Как правильно поступить в данной ситуации наследования от GenericInterface?

    @Akela_wolf
    Extreme Programmer
    Интерфейс не должен решать за потребителя - что используется, что не используется. Поэтому вариантов тут на самом деле такие:
    1. Убрать. Вполне нормальный вариант, если это просто общая часть специализированных DAO.
    2. Реализовать (используется - не используется это неважно)
    3. Дополнить его параметрами, позволяющими потребителю решать что он хочет получить - конкретную страницу, весь список, задавать опции сортировки и т.д., то есть убрать необходимость в специализированных методах.
    Ответ написан
    Комментировать
  • Почему нельзя вычесть переменную внутри while?

    @Akela_wolf
    Extreme Programmer
    Потому что компьютер делает то что вы ему сказали, а не то что вы от него хотите :)

    Пусть account = 100
    тогда, если x=10
    account = 100 + 10 = 110

    затем, если x = -5
    account = 110 - (-5) = ?
    Ответ написан
    Комментировать
  • Нужно ли пользователю иметь JVM для запуска Java-программы?

    @Akela_wolf
    Extreme Programmer
    Да, разумеется. Поэтому некоторые Java-программы распространяются в виде установщика, который сразу же ставит вместе с программой и JVM (причем часто в папку программы). Например, так делает JetBrains IDEA.
    Ответ написан
    3 комментария
  • Как переименовать java в jar?

    @Akela_wolf
    Extreme Programmer
    "Как переименовать .txt в .exe чтобы он двойным кликом открывался?"

    Это называется не "переименовать", а "скомпилировать". Про вашу IDE не скажу, но вообще в целом это делается так:
    1. Компилируете java-файлы в классы (.class) используя javac (не java, а именно javac - компилятор)
    2. Добавляете к этому набору классов файл манифеста
    3. Опционально добавляете туда зависимости (если нужен fat jar)
    4. Собираете все это в zip-архив
    5. Меняете расширение на jar


    В более-менее сложных проектах это все автоматизируется системой сборки, такой как gradle или maven.
    Ответ написан
    2 комментария
  • Как дозаполнить корректно поля для Entity при конвертации из DTO?

    @Akela_wolf
    Extreme Programmer
    Да ктож знает-то кроме вас? Может быть у вас есть разумные значения по умолчанию. Может быть у вас есть какой-то источник данных (настройки, шаблоны и т.д.). Может быть это вообще ситуация ошибки.
    Ответ написан
  • Сколько раз будет выделена память?

    @Akela_wolf
    Extreme Programmer
    Конечно нет, массив же создается при инициализации цикла.
    Ответ написан
    Комментировать
  • Как спроектировать API, чтобы избежать ошибку 504 Gate away?

    @Akela_wolf
    Extreme Programmer
    Если вас тормозит именно внешний API и этот API нормально выдержит большое количество одновременных запросов - то асинхронность более чем поможет. Рекомендую посмотреть Webflux и/или корутины на котлине.
    Ответ написан
    Комментировать
  • Как получить текущий класс в static методе?

    @Akela_wolf
    Extreme Programmer
    Никак. Рассматривайте статический метод как функцию, которая никак не связана с классом (кроме того что статический метод объявлен в его пределах). Просто в Java нет глобальных функций, все делается в пределах классов. А это оставляет для глобальных функций только статические методы. Статический метод вы можете перенести в другой класс - и все будет работать (когда ссылки поправите, разумеется). Также статический метод не может иметь никакого отношения к наследованию.

    Предполагаю, то что вам нужно называется шаблоном "фабрика" и обычно делается на базе синглтонов, а не статических методом.
    Ответ написан
    Комментировать
  • Как дальше продолжить обучение Java?

    @Akela_wolf
    Extreme Programmer
    Какой вопрос - такой ответ.
    Дальше - учить дальше.
    Первый вариант - начать делать любой проект, который лично вам интересен - от консольного приложения, выводящего гороскоп, до сайта или полноценной игры (насчет игры я совершенно не шучу - см. libGDX). И на практике осваивать дальнейшее.
    Альтернативный вариант - взять толстую книгу по Java (например двухтомник Хорстманна) и читать от корки до корки.
    Ответ написан
    Комментировать
  • Как извлечь данные из нескольких таблиц?

    @Akela_wolf
    Extreme Programmer
    Достаете из БД экземпляр класса Information, остальные зависимости Hibernate вытащит сам, если они корректно описаны.
    Ответ написан
    Комментировать
  • Как открыть файл .class?

    @Akela_wolf
    Extreme Programmer
    Используйте декомпилятор - получите файл .java
    Меняете в нем значения и заново компилируете с помощью javac.
    Ответ написан
    Комментировать
  • Как экранировать кавычки внутри кавычек?

    @Akela_wolf
    Extreme Programmer
    Регуляркой вы это сделать не сможете. Так как возможны всякие фиговые случаи, например:
    "full_name": "Колхоз "Светлый путь", деревня Пролетарская", ...

    или
    "full_name": "Слева направо: "Москвич", "Волга", "Жигули"", ...

    Любая регулярка в подобном нагромождении кавычек, запятых и двоеточий (то что можно использовать как опорные символы для регулярки) просто запутается и либо заменит то что не нужно, либо не заменит то что нужно.
    Ответ написан
    Комментировать
  • Как записать json который содержать массив объектов в pojo?

    @Akela_wolf
    Extreme Programmer
    Скажите, а вас разный регистр буковок в запросе и в ответе (хотя там одни и те же DTO) ни на какие мысли не наталкивает?

    А меня вот наталкивает, что Jackson сериализует и десериализует поля с именами из маленьких буковок. Либо сконфигурируйте Jackson чтобы он понимал большие - либо шлите запрос с маленькими буковками.
    Ответ написан
    Комментировать
  • Может ли Service иметь репозитории других классов?

    @Akela_wolf
    Extreme Programmer
    Технически вам никто не мешает так делать

    Архитектурно - нужно смотреть по конкретному проекту.
    Ответ написан
    1 комментарий
  • Почему TreeSet считает дублирование элементов по значениям ключей HashSet, а не по самим ключам?

    @Akela_wolf
    Extreme Programmer
    Потому что вы так определили компаратор. Метод compare имеет следующий контракт:
    возвращает
    • отрицательное значение если o1 меньше o2
    • положительное значение если o1 больше o2
    • нуль если o1 равно o2.

    Собственно никакого дублирования по ключам HashSet тут нет - это работа вашего компаратора.
    А то что результат работы компаратора противоречит результату работы метода equals - это ошибка программиста, от которой Java никак не может предостеречь.
    После выполнения вызова d.put(k, 2); вы сами сделали так, что compare(6, 3) == 0, то есть сами сформулировали утверждение что 3 == 6. И TreeSet, безусловно, в это верит, зачем ему вас перепроверять вызовом equals? Это же не хэшкод, который подвержен коллизиям - это компаратор, который по своей природе не должен допускать коллизий.

    UPD: Что же касается вашей цели - реализации приоритетной очереди - то чем вам готовый класс PriorityQueue не угодил?
    Ответ написан
  • Как обратиться в enam по числовому порядку?

    @Akela_wolf
    Extreme Programmer
    DayOfWeek.values()[index]
    Ответ написан
    Комментировать
  • Как создать Java приложение с Web интерфейсом?

    @Akela_wolf
    Extreme Programmer
    Spring Boot решает вашу проблему чуть более чем полностью.
    Открываете Spring initializr, отмечаете нужные фичи, получаете заготовку готового приложения, которое можно запустить локально или даже развернуть на сервере, если понадобится.

    И собственно в этом шаблоне дописываете любые нужные вам фичи.
    Ответ написан
    Комментировать
  • Как инвертировать строки в массиве, имплементировав интерфейс Function?

    @Akela_wolf
    Extreme Programmer
    Функциональное программирование - это про применение последовательности функций к аргументам (и про функции высшего порядка). Вообще, если коснулись функционального программирования и списков-массивов, то начинайте смотреть StreamAPI, это вот что ни на есть самая функциональщина в джаве. Вообще в джаве функциональное программирование не так чтобы очень хорошее, если эта тема интересна - идите в Котлин (или Скала, но Скала практически не применяется в промышленном программировании).

    Вашу задачу можно решить, например, вот так:
    import java.util.Arrays;
    
    public class Main {
    
        public static void main(String[] args) {
            Arrays.stream(args).map(Main::reverse).forEach(System.out::println);
        }
    
        private static String reverse(String s) {
            final StringBuilder result = new StringBuilder();
            for (char c : s.toCharArray()) {
                result.insert(0, c);
            }
    
            return result.toString();
        }
    }


    Тут интерфейс используется неявно (в функции map), туда подставлена другая функция - reverse. Если хочется - можно обернуть её в интерфейс.
    Ответ написан
    Комментировать
  • Как правильно импортировать сторонние классы?

    @Akela_wolf
    Extreme Programmer
    Откройте для себя системы сборки, такие как Maven и Gradle (рекомендую последний). Они позаботятся обо всех зависимостях и правильном размещении их в classpath. Работа над любым более-менее сложным проектом на Java без подобных систем - это одна сплошная непрекращающаяся боль.
    Ответ написан
    4 комментария
  • Зачем нужны интерфейсы для слоев DAO и Service в Java?

    @Akela_wolf
    Extreme Programmer
    Интерфейсы нужны для возможности замены реализации не затрагивая основной код. При использовании интерфейсов основной код ничего не знает об деталях реализации (слабая связанность). Соответственно, реализацию можно вынести в отдельный модуль (изолировать сложность). Если основной код ссылается непосредственно на класс, содержащий реализацию (сильная связанность), то сложность программы возрастает и сопровождение программы усложняется. Поэтому интерфейсы особенно нужны на границах подсистем.

    Если реализация отделена от основного кода, то становится легко подменить её в тестах, например, подсунуть in memory реализацию, вместо БД. См. fake object (не путать с mock). Это еще один важный плюс интерфейсов.

    Возможно, в простых программах интерфейсы не слишком нужны. Но, поскольку вы говорите об учебном примере, то использовать их (приучая сразу к хорошему, правильному стилю) - это правильно.
    Ответ написан
    Комментировать