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

Java使用泛型类型创建泛型类,java,android,generics,reflection,dualcache,Java,Android,Generics,Reflection,Dualcache,我正在尝试使用库实现一个通用缓存类。在实例化DualCache类时,还需要提供一个序列化器实例,该实例本身是一个泛型类,应该与它所连接的DualCache具有相同的类型 简单地说,我需要以某种方式将T的类传递给JSONSerializer构造函数,如代码中所示,但不知道如何传递 public class Cache<T> { private boolean initialized = false ; private ArrayList<Long> cach

我正在尝试使用库实现一个通用缓存类。在实例化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 ;
        }
    }
}
公共类缓存{
私有布尔初始化=false;
private ArrayList cachedItemList=新建ArrayList();
专用双缓存双缓存;
公共void初始化(上下文){
Log.e(调试标签,“缓存/初始化”);
如果(!已初始化){
dualCache=新生成器(ProjectInfo.cacheName,ProjectInfo.APP\u版本)
.enableLog()
.UserReferenceInRAM(ProjectInfo.diskCacheSize,新的SizeOf(){
@凌驾
公共int sizeOf(T对象){
返回ProjectInfo.diskCacheSize/numCachedItems;
}
})
.useSerializerInDisk(ProjectInfo.diskCacheSize,true,
新的JsonSerializer(T.class),上下文)
.build();
GetCurrentCachedItemList(上下文);
打印当前项目(上下文);
初始化=真;
}
}
}

假设有一个形式为
JsonSerializer(Class)
的构造函数,您将需要做完全相同的事情

private final Class<T> clazz;

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

public void initialize(Context context) {
    ...
                        new JsonSerializer<>(clazz), context)
私人期末课堂;
公共缓存(类clazz){
this.clazz=clazz;
}
公共void初始化(上下文){
...
新JsonSerializer(clazz),上下文)

T
在运行时被擦除。为此,在初始化
Cache
DualCache
时,您需要将T的类存储在某个位置。或者,如果您可以从
Cache
DualCache
获取T的实例,则可以使用该实例来确定类。由于类型擦除,您将不会有ac在运行时访问
T
的类型,因此您可能必须将
传递给
initialize()
,并将其传递给
JsonSerializer
。或者将其传递给
缓存
构造函数并将其存储在实例中。感谢您的解决方案,并对我的延迟响应表示歉意。这解决了问题。