我有一項家庭作業,指定將一個通用存儲庫層添加到現有項目中。我面臨的問題是以下幾點。我的存儲庫應該封裝一個存儲數據的映射。我到目前爲止有以下內容:使用映射的通用存儲庫
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類中。我想存儲人員,所以我會做類似Repository<Person> repo = new Repository<Person>();
但問題是我不知道如何在Repository構造函數中構造映射。換句話說,我不知道密鑰的類型。我希望人的cnp
是關鍵字(類型String
),但是如果我強制地圖將鍵定義爲字符串,我的存儲庫不再是通用的,因爲如果我想添加一些具有關鍵字的動物對象作爲一個整數,地圖應該像map = new Map<Integer, T>();
。
所以問題是如何使用存儲在存儲庫中的對象實現IDObject
並知道存儲庫封裝存儲數據的映射的事實,仍然可以使用像Repository<Person> repo = new Repository<Person>();
這樣的構造?我應該如何知道密鑰,以便完成存儲庫類?
「通用存儲庫層」的真正含義是什麼?你怎麼想象這種用法?所有存放的對象是否共享唯一的標識符類?如果是,那應該很簡單。如果沒有,我認爲這個任務沒有意義。 – Deltharis 2014-11-24 15:28:18
@Deltharis那麼,存儲庫應該有如下方法:'store(T obj)','getAll()'等等。例如,'store(T obj)'方法實際上會生成'map.add(K key,T obj)',並將新存儲的對象保存到外部文件中。另外,當您創建存儲庫時,存儲在文件中的所有對象都將加載到地圖中。這就是我想象的一部分用法。是的,我所有的存放的對象共享唯一的標識符類。 – cuvidk 2014-11-24 16:11:45