Java使用泛型类型创建泛型类

时间:2017-04-18 13:34:50

标签: java android generics reflection dualcache

我正在尝试使用DualCache库实现通用缓存类。在实例化DualCache类时,还需要提供一个序列化程序实例,该实例本身是一个通用类,应该与其附加的DualCache类型相同。

简单地说,我需要以某种方式将T的类传递给代码中指示的JSONSerializer构造函数,但不知道如何。

public class Cache<T> {
    private boolean initialized = false ;
    private ArrayList<Long> cachedItemList = new ArrayList<>() ;
    private DualCache<T> dualCache ;

    public void initialize(Context context) {
        Log.e(DEBUG_TAG, "Cache/initialize") ;
        if (!initialized) {
            dualCache = new Builder<T>(ProjectInfo.cacheName, ProjectInfo.APP_VERSION)
                    .enableLog()
                    .useReferenceInRam(ProjectInfo.diskCacheSize, new SizeOf<T>() {
                        @Override
                        public int sizeOf(T object) {
                            return ProjectInfo.diskCacheSize / numCachedItems;
                        }
                    })
                    .useSerializerInDisk(ProjectInfo.diskCacheSize, true,
                            new JsonSerializer<>(T.class), context)
                    .build() ;
            getCurrentCachedItemsList(context) ;
            printCurrentItems(context) ;
            initialized = true ;
        }
    }
}

1 个答案:

答案 0 :(得分:2)

假设有一个JsonSerializer<T>(Class<T>)形式的构造函数,你需要做同样的事情。

private final Class<T> clazz;

public Cache(Class<T> clazz) {
    this.clazz = clazz;
}

public void initialize(Context context) {
    ...
                        new JsonSerializer<>(clazz), context)