1
我试图使用DualCache库实现泛型高速缓存类。当实例化DualCache类时,还需要提供一个序列化器实例,该实例本身是一个通用类,应与其所连接的DualCache类型相同。Java创建具有泛型类型的泛型类
简而言之,我需要以某种方式将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'或'DualCache '时将T的类存储在某个地方。或者,如果您可以从'Cache'或'DualCache'获得T的实例,则可以使用该实例来确定类。 –
由于类型擦除,您将无法在运行时访问“T”类型,因此您可能必须将'Class'传递给'initialize()'并将其传递给'JsonSerializer'。或者将它传递给'Cache'构造函数并将其存储在实例中。 –
Thomas
http://stackoverflow.com/questions/3403909/get-generic-type-of-class-at-runtime – Andremoniy