| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Java: Общие вопросы > Базовый класс |
| Автор: zss 18.2.2005, 16:38 | ||||||
| Что-то целый день мучаюсь и уже 10 раз переделываю Есть некий класс. Необходимость в нем возникла из-за того, чтоб хранить данные в той последовательности в которой они были добавлены
Есть абстрактный класс, котоый содержит массив объектов и массив данных (имена)
Есть наследники, в которых эти данные различаются
Тоесть любой наследник содержит собственное описание и может являтся контейнером объектов. Т.к. в DoubleArray реализована вся функциональность доступа к данным, то хотелось бы одним махом заполнить его данными (arrayKey & arrayName) Вопрос: 1. можно ли так инициализировать массивы абстрактного класса. 2. Если использовать вместо массивов DoubleArray, то как его инициализировать |
| Автор: NotGonnaGetUs 18.2.2005, 17:15 |
| Кто-то из нас ничего не понял. 1. В AbstractClass arrayKey и arrayName объявлены как private. private static String[] arrayKey = {"Aaa", "Bbb", "Ccc"}; - инициализирует собственную переменныую в классе Class, причём статик. 2. private static DoubleArray doubleArray = new DoubleArray(); static { doubleArray.addValue("Aaa", "aaaaa"); doubleArray.addValue("Baa", "bbbbb"); ... } или добавь в doubleArray метод addValues(String[] keys, String[] names) и реализуй. Если нужно "не статик" поле, то инициализируй его в конструкторе класса. off: DoubleArray - массив объектов Double. Class - библиотечный java класс (java.lang.Class) |
| Автор: Tamerlann 18.2.2005, 18:35 |
| А можно поподробнее, зачем вообще понадобился такой DoubleArray? |
| Автор: zss 18.2.2005, 20:49 | ||||||
Это я просто для примера привел
Хорошо - объясню подробнее. Необходимо создать классы, в которые являются контейнерами объектов. Но помимо этого содержат информацию о себе (каждый класс разную). Информация представляет собой строки ключ-значение (Properties не подходит, т.к. хранит данные в произвольном порядке, а надо в том порядке, в котором они были добавлены) Данные: ключ - значение должны быть private, а доступ к ним происходит по индексу (для удобства анализа). Для получения значения используется ключ. А для получения ключа - индекс. Также существует возможность parseKey для получения индекса ключа (тоже для удобства). Если использовать массивы строк, то для каждого класса надо было бы писать методы доступа к данным и их инициализацию. Поэтому я написал класс DoubleArray, который все это реализует, но инициализацию его и часть методов приходится повторять в каждом классе. Поэтому я и спрашивал как правильно написать базовый класс, чтоб в нем было реализовано лишь добавление данных для описания, а инициализация происходила в конструкторе базового класса. Пример (два разных класса)
А методы доступа данных реалихованы в базовом классе. Кроме того они являются контейнерами |
| Автор: Domestic Cat 18.2.2005, 21:05 | ||
list будет тоже доступен сабклассам. |
| Автор: zss 18.2.2005, 21:23 | ||
Domestic Cat, прочитал книгу, которую ты рекомендовал, но такую инициализацию встречаю впервые Спасибо - попробую |
| Автор: zss 18.2.2005, 21:35 |
| Кстати, Domestic Cat, а если нужно, что массивы строк были static - так не получиться. Ну чтобы к ним можно было обращаться не создавая объект |
| Автор: NotGonnaGetUs 18.2.2005, 21:45 | ||
static'и не наследуются. |
| Автор: zss 18.2.2005, 22:24 |
| Тоесть придется все-таки создавать объект Мне просто хотелось описание доставать не создавая объект, а использовать его как контейнер - создав |
| Автор: djGri 21.2.2005, 18:51 | ||
Это похоже на Composite Pattern |