У меня есть домашняя работа, которая указывает, чтобы добавить к существующему проекту общий уровень репозитория. Проблема, с которой я сталкиваюсь, заключается в следующем. Мой репозиторий должен инкапсулировать карту, в которой хранятся данные. То, что у меня было до сих пор, следующее:Общий репозиторий с использованием карты
public interface IDObject<T> {
public Comparable<T> getID();
}
public class Person implements IDObject<String> {
private String cnp;
private String name;
private String age;
public Person(String cnp, String name, String age) {
this.cnp = cnp;
this.name = name;
this.age = age;
}
public void setName(String name) { this.name = name; }
public void setCNP(String cnp) { this.cnp = cnp; }
public void setAge(String age) { this.age = age; }
public String getName() { return name; }
public String getCNP() { return cnp; }
public String getAge() {return age; }
public String toString() { return cnp + "-" + name + "-" + age; }
@Override
public Comparable<String> getID() { return getCNP(); } //basically the unique identifier
}
public class Repository<T extends IDObject<?????????>>{
private IMap map;
public Repository() {
map = new Map<???????, T>();
}
...
}
Так что моя проблема возникает в классе репозитория. Я хочу хранить людей, поэтому я сделаю что-то вроде Repository<Person> repo = new Repository<Person>();
Но проблема в том, что я не знаю, как построить карту в конструкторе репозитория. Другими словами, я не знаю тип ключа. Я хочу, чтобы Person's cnp
был ключом (который относится к типу String
), но если я заставляю карту определять ключи как строки, мой репозиторий больше не является общим, потому что если я хочу добавить некоторые объекты Animal, у которых есть ключ как целое число, карта должна быть равна map = new Map<Integer, T>();
.
Итак, вопрос в том, как я могу использовать конструкцию типа Repository<Person> repo = new Repository<Person>();
, используя тот факт, что объекты, которые хранятся в репозитории, реализуют IDObject
и зная, что репозиторий инкапсулирует карту, в которой хранятся данные? Как мне узнать ключ, чтобы закончить класс репозитория?
Что означает «общий слой репозитория»? Как вы представляете себе использование? Будут ли все ваши депонированные объекты иметь уникальный класс идентификаторов? Если да, это должно быть просто. Если нет, я не думаю, что задача имеет смысл. – Deltharis
@ Deltharis Ну, в репозитории должны быть такие методы, как: 'store (T obj)', 'getAll()' и т. Д. Например, метод 'store (T obj)' фактически сделает 'map.add (K key, T obj)' и сохранит вновь сохраненный объект в файл extern. Также при создании репозитория все объекты, хранящиеся в файле, будут загружены на карту. Вот как я себе представляю часть использования. И да, все мои депонированные объекты имеют уникальный класс идентификаторов. – cuvidk