Я работаю над эволюционной имитационной моделью, реализованной на Java, и столкнулся с проблемой дизайна объектной ориентации, которую я, похоже, не сработал. Проблему можно резюмировать следующим образом:Java Generic Container Class
У меня есть базовый абстрактный плеер класса и два конкретных подклассов, связист и приемник:
abstract class Player
{
Strategy[] strategies;
double fitness;
...
}
class Signaller extends Player
{
double quality;
....
}
class Receiver extends Player
{
double[] weights;
int chosenChannel;
....
}
Теперь мне нужно классы, которые представляют коллекции Связисты и приемников, и я ограничен для использования массивов для их хранения. Существуют методы, общие для обоих типов населения, но также специальные методы для сигнальных групп населения или для населения-получателя.
Концептуально, мне нужно что-то вроде этого:
abstract class Population
{
Player[] members;
void mixUpPopulation() {...}
Strategy[] getMeanStrategies() {...}
double getMeanFitness() {...}
...
}
class SignallerPopulation extends Population
{
Signaller[] members;
...
}
class ReceiverPopulation extends Population
{
Receiver[] members;
double[] getChannelPreferences() {...}
...
}
Я думал о двух основных способов достижения этой цели:
Have иерархию классов, как описано выше.
Задача: Как можетPlayer[]
в суперклассе, а такжеSignaller[]
илиReceiver[]
в подклассах относятся к одной и той же коллекции объектов?Сделать базовый класс родовое:
class Population <T extends Player>
{
...
T[] members = (T[])new Object[popSize];
}
Проблема: Как реализовать методы, специфичные для каждого из типов населения?
Я был бы признателен вам за понимание этих проблем или предложения других способов решения проблемы.
массивы и дженерики вызовут проблемы, я думаю. попытайтесь скомпилировать предложенный второй оператор ... почему бы не использовать ArrayList? –
Karussell
** Я вынужден использовать массивы для их хранения ** - почему? –
Привет, Алекс. Если вы его решили, можете ли вы опубликовать рабочий пример. Если вам трудно понять этот пример, ваша оценка будет оценена по достоинству. – Deepak