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