• Как переключаться между панелями из разных классов?

    Erik_Mironov
    @Erik_Mironov
    Старые вопросы: *Dies from cringe*
    Приветствую. Возможно это то что вы ищете.
    https://docs.oracle.com/javase/7/docs/api/javax/sw...

    Касаемо архитектуры пока трудно сказать, т.к. иерархия классов весьма небольшая. Единственное что я бы сделал, так это выделил среди ваших классов-компонентов общие поля и методы и вынес все это в абстрактный класс, который будет наследовать JPanel, а затем уже наследовался от него.
    Ответ написан
    1 комментарий
  • Почему кнопка отображается только при наведении курсора?

    Erik_Mironov
    @Erik_Mironov
    Старые вопросы: *Dies from cringe*
    Приветствую. Вам не нужно переопределять paint контейнер верхнего уровня, вместо этого переопределите метод paintComponent, в нем вызовете суперконструктор и отрисуйте вашу кнопку.
    Ответ написан
    1 комментарий
  • Почему PgAdmin не принимает пароль от БД (PSQL 12 и PgAdmin4)?

    Erik_Mironov
    @Erik_Mironov Автор вопроса
    Старые вопросы: *Dies from cringe*
    Создание новой БД и загрузка дампа старой.
    Ответ написан
    Комментировать
  • Наследование приватных полей и методов?

    Erik_Mironov
    @Erik_Mironov
    Старые вопросы: *Dies from cringe*
    Подкласс не наследует закрытые члены своего родительского класса. Однако, если у суперкласса есть общедоступные или защищенные методы для доступа к его частным полям, они также могут использоваться подклассом. Так же, если класс-потомок является вложенным классом по отношению к классу-родителю, то имеет доступ ко всем частным полям и методам класса-родителя. В вашем же случае вы обязаны вызвать конструктор родительского класса в классе-потомке. Это не значит что вы получили доступ к приватному полю класса-родителя
    Ответ написан
    2 комментария
  • Добавление строки к строке до определённого (бесконечно большого) числа и нахождение в ней символа 'а'. Как решить?

    Erik_Mironov
    @Erik_Mironov
    Старые вопросы: *Dies from cringe*
    Вам не нужно конкатенировать миллиарды символов, вы можете посчитать количество повторов в исходной строке, а затем умножить это число на количество полных повторов строки + остаток
    static long repeatedString(String s, long n) {
            /* Кол-во повторов в исходной строке */
            int rep = (int) s.toLowerCase()
                    .chars()
                    .filter(c -> c == 'a').count();
    
            /* Кол-во циклов, в которых исходная строка будет полностью скопирована */
            long cycles = (n / s.length()) - 1;
    
            /* Кол-во повторов в остаточной строке, которой не хватило на полный цикл */
            int remainder = (int) s.toLowerCase()
                    .substring(0, (int) n % s.length())
                    .chars()
                    .filter(c -> c == 'a').count();
    
            return rep * cycles + remainder + rep;
    }
    Ответ написан
    2 комментария
  • Как преобразовать String[] в Map через Stream API?

    Erik_Mironov
    @Erik_Mironov
    Старые вопросы: *Dies from cringe*
    Если вам нужны ключи и значения в исходном порядке, то используйте LinkedHashMap.
    String[] array = {"name", "Ivanov", "country", "Ukraine", "city", "Kiev", "age", null};
    
           Map<String, String> map = Stream.iterate(
                    Arrays.asList(array), list -> list.subList(2, list.size()))
                    .limit(array.length / 2)
                    .collect(Collectors.toMap(
                            list -> list.get(0) == null ? "null" : list.get(0),
                            list -> list.get(1) == null ? "null" : list.get(1),
                            (x, y) -> y, LinkedHashMap::new));
    
            map.entrySet().forEach(System.out::println);
    Ответ написан
    Комментировать
  • @Volatile, кэшировние?

    Erik_Mironov
    @Erik_Mironov
    Старые вопросы: *Dies from cringe*
    CPU имеют кэши разного уровня L1, L2, L3. Каждый поток(а также ядро процессора) имеет собственный кэш. Эти кэши хранят минимальный набор оперативной памяти для обеспечения производительности. Если переменная определена как volatile, то все операции записи над ней сразу же отражаются в памяти и не кэшируются. У потоков нет локальной копии памяти и часть данных которую поток читает / записывает может быть из кэша, а не из основной памяти, а поэтому когда один поток изменяет какую-либо переменную, то другой поток не может увидеть изменения над ней. Грубо говоря, для таких случаев и нужен volatile. Фух, объяснил как мог, возможно кто-то объяснит более подробно.

    5fec4c344c127654024248.png

    Можете почитать про модель памяти в Java
    https://docs.oracle.com/javase/specs/jls/se7/html/...
    Ответ написан
    Комментировать
  • Разные методы для каждого потока или synchronized?

    Erik_Mironov
    @Erik_Mironov Автор вопроса
    Старые вопросы: *Dies from cringe*
    Я, похоже задал очень глупый вопрос и только сейчас сам понял что он глупый, ведь использование общего ресурса в разных методах не освобождает от необходимости использования synchronized, а если общего ресурса нет, то и synchronized не нужен.
    Ответ написан
    Комментировать