【发布时间】:2017-04-18 13:34:50
【问题描述】:
我正在尝试使用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 ;
}
}
}
【问题讨论】:
-
T在运行时被擦除。为了做到这一点,您需要在启动Cache<T>或DualCache<T>时将T 的类存储在某处。或者,如果您可以从Cache或DualCache获取 T 的实例,则可以使用该实例来确定类。 -
由于类型擦除,您将无法在运行时访问
T的类型,因此您可能必须将Class<T>传递给initialize()并将其传递给JsonSerializer。或者将其传递给Cache构造函数并将其存储在实例中。
标签: java android generics reflection dualcache