Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Базовый класс 
:(
    Опции темы
zss
Дата 18.2.2005, 16:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 708
Регистрация: 17.6.2004

Репутация: нет
Всего: 2



Что-то целый день мучаюсь и уже 10 раз переделываю smile

Есть некий класс. Необходимость в нем возникла из-за того, чтоб хранить данные в той последовательности в которой они были добавлены

Код

public class DoubleArray {

private ArrayList list = new ArrayList ();

   public int getSize () {
       return list.size ();
   }

public void addValue ( String key, String value ) {
 list.add ( new Struct ( key, value ) );
}

...
}

class Struct {

private String key;
private String value;

Struct ( String key, String value ) {
 this.key = key;
 this.value = value;
}

public String getKey () {
 return key;
}

public String getValue () {
 return value;
}
}



Есть абстрактный класс, котоый содержит массив объектов и массив данных (имена)
Код

public abstract class AbstractClass {

   private ArrayList objectList = new ArrayList ();
   private String arrayKey[];
   private String arrayName[];


...


Есть наследники, в которых эти данные различаются
Код


public class Class extends AbstractClass {

public final static int A = 0;
public final static int B = 1;
public final static int C = 2;

private static String[] arrayKey = {"Aaa", "Bbb", "Ccc"};
private static String[] arrayName = {"aaaaa", "bbbbb", "ccccc"};



Тоесть любой наследник содержит собственное описание и может являтся контейнером объектов.

Т.к. в DoubleArray реализована вся функциональность доступа к данным, то хотелось бы одним махом заполнить его данными (arrayKey & arrayName)

Вопрос:
1. можно ли так инициализировать массивы абстрактного класса.
2. Если использовать вместо массивов DoubleArray, то как его инициализировать

PM MAIL ICQ   Вверх
NotGonnaGetUs
Дата 18.2.2005, 17:15 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Кто-то из нас ничего не понял.

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 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 183
Регистрация: 10.11.2002
Где: Минск, Беларусь

Репутация: 2
Всего: 2



А можно поподробнее, зачем вообще понадобился такой DoubleArray?

Это сообщение отредактировал(а) Tamerlann - 18.2.2005, 18:35
--------------------
http://timursdev.blogspot.com/ 
PM MAIL WWW Skype   Вверх
zss
Дата 18.2.2005, 20:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 708
Регистрация: 17.6.2004

Репутация: нет
Всего: 2



Цитата(NotGonnaGetUs @ 18.2.2005, 17:15)
DoubleArray - массив объектов Double.
Class - библиотечный java класс (java.lang.Class)


Это я просто для примера привел smile

Цитата(Tamerlann @ 18.2.2005, 18:35)
А можно поподробнее, зачем вообще понадобился такой DoubleArray?


Хорошо - объясню подробнее.

Необходимо создать классы, в которые являются контейнерами объектов. Но помимо этого содержат информацию о себе (каждый класс разную).

Информация представляет собой строки ключ-значение (Properties не подходит, т.к. хранит данные в произвольном порядке, а надо в том порядке, в котором они были добавлены)

Данные: ключ - значение должны быть private, а доступ к ним происходит по индексу (для удобства анализа). Для получения значения используется ключ. А для получения ключа - индекс.

Также существует возможность parseKey для получения индекса ключа (тоже для удобства).

Если использовать массивы строк, то для каждого класса надо было бы писать методы доступа к данным и их инициализацию.

Поэтому я написал класс DoubleArray, который все это реализует, но инициализацию его и часть методов приходится повторять в каждом классе.

Поэтому я и спрашивал как правильно написать базовый класс, чтоб в нем было реализовано лишь добавление данных для описания, а инициализация происходила в конструкторе базового класса.

Пример (два разных класса)
Код

public class A  extends ...{

   private ArrayList list = new ArrayList();
   public final static int Q = 1;
   public final static int W = 2;

   String [] s1 = {"q", "w"}
   String [] s2 = {"qqq", "www"}

}
public class A extends ...{
   private ArrayList list = new ArrayList();

   public final static int D = 1;
   public final static int F = 2;

   String [] s1 = {"d", "f"}
   String [] s2 = {"ddd", "fff"}

}




А методы доступа данных реалихованы в базовом классе. Кроме того они являются контейнерами
PM MAIL ICQ   Вверх
Domestic Cat
Дата 18.2.2005, 21:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 50
Всего: 172



Код

public class DoubleArray {

   protected ArrayList list = new ArrayList ();
   protected String [] s1;
   protected String [] s2;

   public int getSize () {
       return list.size ();
   }

   public void addValue ( String key, String value ) {
 list.add ( new Struct ( key, value ) );
   }

...
}
public class A1  extends DoubleArray {

   public final static int Q = 1;
   public final static int W = 2;
   
   public A1()
   {
       s1 = new String[] {"q", "w"};
       s2 = new String[] {"qqq", "www"};
   }
 
}
public class A2 extends DoubleArray {

   public final static int D = 1;
   public final static int F = 2;

   public A2()
   {
       s1 = new String[] {"d", "f"};
       s2 = new String[] {"fdgf", "fgfgfgfgf"};
   }

}


list будет тоже доступен сабклассам.


--------------------

PM   Вверх
zss
Дата 18.2.2005, 21:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 708
Регистрация: 17.6.2004

Репутация: нет
Всего: 2



Цитата(Domestic @ 18.2.2005, 21:05)
s1 = new String[] {"d", "f"}


Domestic Cat, прочитал книгу, которую ты рекомендовал, но такую инициализацию встречаю впервые smile

Спасибо - попробую
PM MAIL ICQ   Вверх
zss
Дата 18.2.2005, 21:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 708
Регистрация: 17.6.2004

Репутация: нет
Всего: 2



Кстати, Domestic Cat, а если нужно, что массивы строк были static - так не получиться.

Ну чтобы к ним можно было обращаться не создавая объект
PM MAIL ICQ   Вверх
NotGonnaGetUs
Дата 18.2.2005, 21:45 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Цитата(zss @ 18.2.2005, 21:35)
Кстати, Domestic Cat, а если нужно, что массивы строк были static - так не получиться.

Ну чтобы к ним можно было обращаться не создавая объект

static'и не наследуются.

  Вверх
zss
Дата 18.2.2005, 22:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 708
Регистрация: 17.6.2004

Репутация: нет
Всего: 2



Тоесть придется все-таки создавать объект smile Пришли к тому, из-за чего я все это затевал smile

Мне просто хотелось описание доставать не создавая объект, а использовать его как контейнер - создав

Это сообщение отредактировал(а) zss - 18.2.2005, 22:32
PM MAIL ICQ   Вверх
djGri
Дата 21.2.2005, 18:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 77
Регистрация: 21.2.2005

Репутация: 1
Всего: 3



Цитата
Необходимо создать классы, в которые являются контейнерами объектов. Но помимо этого содержат информацию о себе (каждый класс разную).

Это похоже на Composite Pattern

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0488 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.