enum with generic HashMap - PullRequest
       14

enum with generic HashMap

2 голосов
/ 30 марта 2012

Я пытался создать что-то вроде этого как enum:

    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 определенного типа. Но общее перечисление вообще невозможно, не так ли?

Какие-нибудь другие решения, чтобы получить что-то подобное?

1 Ответ

0 голосов
/ 30 марта 2012

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

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) имеют все прописные буквы (с подчеркиванием, разделяющим слова, если требуется)

...