|
0 / 0 / 0
Регистрация: 28.11.2018
Сообщений: 14
|
|
Наследование статических полей04.05.2021, 18:58. Показов 4030. Ответов 15
Есть 8 классов для работы с конфигами. В них есть некоторое количество как одинаковых так и разных статических методов и полей. Вынес всё повторяющееся в отдельный класс, от которого наследовал все остальные. В нём есть статические поля configName, file, config. И есть функция load, которая инициализирует эти поля. Вот только я предполагал, что для каждого наследника будут свои статические поля, а они для всех общие, и каждый последующий конфиг перезаписывает их. Собственно вопрос: Как быть?
0
|
|
| 04.05.2021, 18:58 | |
|
Ответы с готовыми решениями:
15
Наследование полей |
|
0 / 0 / 0
Регистрация: 28.11.2018
Сообщений: 14
|
|
| 04.05.2021, 19:21 [ТС] | |
|
У меня не планируется делать несколько объектов этого класса. Я буду использовать только статические методы. Если бы у всех классов были одинаковые методы, то был бы смысл использовать один класс и тогда отпала бы проблема с этими статическими полями
0
|
|
|
|
||
| 04.05.2021, 19:44 | ||
|
Вообще как вариант сделать статические методы getConfigName и т.д. Ну и если надо перегружать их. Только вот если эти статические поля постоянно меняются, то как по мне проще сделать их не статическими...
0
|
||
|
0 / 0 / 0
Регистрация: 28.11.2018
Сообщений: 14
|
|||
| 04.05.2021, 20:25 [ТС] | |||
|
Да и к тому-же статические поля все равно будут, тот же путь к файлу. Его в таком случае только в конструкторе передать можно будет, типа Config cfg = new Config("path-to-cfg"); cfg.get("что-то"); вместо Config.get("что-то") Добавлено через 12 минут public abstract class SuperClass { static String name = "Not initialized"; public static void load(String Name) { name = Name; } public static String getName() { return name; } ... } И его наследники public abstract class First extends SuperClass{} public abstract class Second extends SuperClass{} При выполнении First.load("first"); инициализируется name и больше изменяться не должна, но если выполнить Second.load("second"), то она изменится, что мне не нужно. Мне как-то нужно сделать статические поля в наследниках, чтобы они были не связаны друг с другом, но с ними работают методы и в суперклассе, так что и там эти поля нужно создать, и получается из-за сокрытия при обращении к полу name из метода в First будет одно значение, а из метода суперклассе - другое Добавлено через 8 минут По факту, мне нужно просто добавить методы и поля из суперкласса во все остальные, ctrl+c ctrl+v должно сработать идеально, но это будет ужасно
0
|
|||
|
|
||
| 04.05.2021, 20:32 | ||
|
А так статические методы в Java перегружать нельзя. Так что я без понятия какой "грязный хак" тут использовать....
0
|
||
|
0 / 0 / 0
Регистрация: 28.11.2018
Сообщений: 14
|
|
| 04.05.2021, 20:36 [ТС] | |
|
0
|
|
|
|
||||||
| 04.05.2021, 20:45 | ||||||
Сообщение было отмечено TkachGeek как решение
Решение
Тип того:
Кликните здесь для просмотра всего текста
0
|
||||||
|
1172 / 762 / 194
Регистрация: 21.05.2016
Сообщений: 1,858
|
|
| 05.05.2021, 02:47 | |
|
Это не статический объект. Такого понятия вообще нет.
Есть, например, паттерн синглтон.
0
|
|
| 05.05.2021, 03:26 | |
|
Не по теме: Tavashi, это объект? Вроде бы да. Есть значение статик? Вроде тоже есть. Но понятия нет?
0
|
|
|
1172 / 762 / 194
Регистрация: 21.05.2016
Сообщений: 1,858
|
|
| 05.05.2021, 03:52 | |
|
Coffeini,
config1 статическая переменная типа String. Посмотрел javadoc и не встретил такого термина как статический объект.
0
|
|
|
|
|||
| 05.05.2021, 04:12 | |||
|
Ну а если серьезно, то ты занимаешься каким-то прескриптивизмом. Такое чувство, что лишь бы придраться...
0
|
|||
|
|
|
| 05.05.2021, 12:14 | |
|
TkachGeek, если вы говорите, что поля класса в которых собственно хранятся ваши настройки меняться после построения объекта не будут, так может вам надо чтобы они не статическими, а финальными были?
0
|
|
|
0 / 0 / 0
Регистрация: 28.11.2018
Сообщений: 14
|
|
| 06.05.2021, 16:19 [ТС] | |
|
Да там без разницы, коль у наследников статические поля общие. Разве что ошибку будет кидать. Сделал как кофеини советовал: В другом классе сделал статические поля, в которых по экземпляру каждого класса, чтобы избежать этих общих полей.
0
|
|
|
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
|
|
| 06.05.2021, 18:31 | |
|
Обычно если ты хочешь сделать то, что не позволяет язык, это означает что ты что-то длеаешь не так. Это как раз такой случай.
Загрузка корфигурации это распространенная задача, для решения которой умные люди уже написали библиотеки, которые можно найти в гугле, использовать и не городить свой огород.
0
|
|
| 06.05.2021, 18:31 | |
|
Помогаю со студенческими работами здесь
16
JAVA:ActionListener и наследование полей. Помощь студенту)
Инициализация статических полей Обnullение статических полей класса Замена статических полей на обычные переменные Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
|
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога
В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
|
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
|
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога
Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
|
|
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
|
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования.
Часть библиотеки BedvitCOM
Использованы. . .
|
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога
SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
|
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога
SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
|