Return Obiect generic

Creez un cache de obiecte. Am probleme cu scrierea unui tip de returnare a metodei (a se vedea getCachedCMSObject ) care este generic, astfel încât nu trebuie să arunc întoarcerea așa cum este indicat în comentariu. Cred că pot trăi cu asta, dar aș prefera să folosesc Generics.

cachedCMSObject este un obiect separat folosind un model "Heterogeneous Collection", dar nu cred că este important în acest caz și nu are legătură cu problema mea.

package util;

import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

public class CMSObjectCache {
    static Map cachedCMSObject = new ConcurrentHashMap();

    public static void putCachedCMSObject(String cmsKey, CMSObject cmsObject) {
        cachedCMSObject.put(cmsKey, cmsObject);
    }

    public static Object getCachedCMSObject(String objectKey, Class<?> clazz) {
        CMSObject c2 = cachedCMSObject.get(objectKey);
        return c2.getCMSObject(Integer.class); //return generic type ?
    }

    public static void main(String[] args) {
        CMSObject cmsObject;

       //put object of type Integer with key "Int:3"
        putCachedCMSObject("Int:3", new CMSObject(Integer.class, 3));

       //Get that object from the cache
        Integer i3 = (Integer) getCachedCMSObject("Int:3", Integer.class); //necessary? 
        System.out.println(i3);
    }
}

Acesta este aspectul CMSObject (de la Bloch).

package util;

import java.util.HashMap;
import java.util.Map;

public final class CMSObject {
    private Map cmsObject = new HashMap();

    public CMSObject() {
    }

    public  CMSObject(Class type, T instance) {
        this.putCMSObject(type, instance);
    }

    public  void putCMSObject(Class type, T instance) {
        if (type == null) {
            throw new NullPointerException("Type is null");
        }
        cmsObject.put(type, instance);
    }

    public  T getCMSObject(Class type) {
        return type.cast(cmsObject.get(type));
    }
}
0
Care este definirea CMSObject ?
adăugat autor Edwin Dalorzo, sursa

1 răspunsuri

Nu este încă clar în întrebarea dvs., dar nu pot decât să presupun că vă îndreptați spre ceva de genul:

class CMSObject{
   public  T getCMSObject(Class klass) {
       //...
   } 
}

Și apoi metoda dvs. exterioară ar trebui să fie oarecum ca

public static  T getCachedCMSObject(String objectKey, Class clazz) {
    CMSObject c2 = cachedCMSObject.get(objectKey);
    return c2.getCMSObject(clazz); //return generic type ?
}
2
adăugat
Asta a făcut trucul. Noroc!
adăugat autor EdgeCase, sursa