2012-03-30 70 views
2

我試圖建立這樣的事情作爲一個枚舉:枚舉與通用的HashMap

public final class CoCoreMemory<T>{ 

    public static final CoCoreMemory<CoeUser> users = new CoCoreMemory<CoeUser>(); 
    public static final CoCoreMemory<CoeAdmin> admins = new CoCoreMemory<CoeAdmin>(); 
    public static final CoCoreMemory<CoeRequest> requests = new CoCoreMemory<CoeRequest>(); 

    private HashMap<String, T> mem = new HashMap<String, T>(); 

    public int add(String zzf, T t){ 
     int result = -1; 
     if(!mem.containsKey(zzf)) { 
      mem.put(zzf, t); 
      result = 100; 
     } 
     return result; 
    } 
    private CoCoreMemory(){ 

    } 
} 

我嘗試如下.....

public enum Memory<T>{ 

    <CoeUser>users, <CoeAdmin> admins, <CoeRequest> requests; 

    private HashMap<String, T> mem = new HashMap<String, T>(); 

    public int add(String zzf, T t){ 
     int result = -1; 
     if(!mem.containsKey(zzf)) { 
      mem.put(zzf, t); 
      result = 100; 
     } 
     return result; 
    } 
} 

其實我只是想有一定的實例數有自己的某種類型的HashMap。但是一個普通的枚舉是不可能的,是嗎?

任何其他解決方案來得到這樣的東西?

+0

我已經讀過幾次了,我不知道你想要什麼 – Bohemian 2012-03-30 13:00:03

+0

較低的代碼塊沒有'因爲泛型枚舉是不可能的。我只想要有三個固定的實例,其中包含一個具有特定類型的HashMap。例如:我有三個用戶,管理員和請求。用戶中的HashMap mem應該只包含UserObjects,管理員中的HashMap應該只包含AdminObjects和最後一個RequestObjects。實際上與上層代碼塊相同的東西,但作爲枚舉而不是類 – Chris 2012-03-30 13:42:49

回答

0

使用普通類型類爲您的實例的靜態常量,如下所示:

public class Memory<T> { 
    public static final Memory<CoeUser> USERS = new Memory<CoeUser>(); 
    public static final Memory<CoeAdmin> ADMINS = new Memory<CoeAdmin>(); 
    public static final Memory<CoeRequest> REQUESTS = new Memory<CoeRequest>(); 

    private Map<String, T> mem = new HashMap<String, T>(); 

    public int add(String zzf, T t){ 
     int result = -1; 
     if (!mem.containsKey(zzf)) { 
      mem.put(zzf, t); 
      result = 100; 
     } 
     return result; 
    } 
} 

當你需要使用它們,簡單地說:

int result = Memory.USERS.add("foo", myCoeUser); 


僅供參考,實例自動初始化當你第一次使用Memory類時。此外,慣例是常量(即static final)被命名爲全部大寫(如果需要,下劃線將字隔開)