0

我使用 Ehcache 3 和 Declared Cache 作为:

 private Cache<String,GenericClassForList<Person>> personCache;

例如:我有许多来自数据库的要放入缓存的对象列表:

List<Person> personlist=perDao.getAll();
List<Customer> custList=comDao.getAll();
List<Company> companylist=compDao.getAll();

所以,我需要将这些不同类型的列表放在我的缓存中。所以,我尝试制作通用类来将这些列表初始化为:

package com.cache.cachemanager;


import java.util.ArrayList;
import java.util.Collection;

public class GenericClassForList<T> extends ArrayList<T> {

    public GenericClassForList(final Collection<? extends T> c) {
        super(c);
    }


}

我从这里访问这个通用类:

    public class CacheHelper {

        private CacheManager cacheManager;

        private Cache<String,GenericClassForList<Person>> personCache;


        public CacheHelper() {

        }

        //initialziing cache
        public void putInCacheFromDb() {
            System.getProperties().setProperty("java -Dnet.sf.ehcache.use.classic.lru", "true");
            cacheManager= CacheManagerBuilder
                    .newCacheManagerBuilder().build();
            cacheManager.init();

           personCache = cacheManager
                    .createCache("cacheOfe", CacheConfigurationBuilder
                            .newCacheConfigurationBuilder(
                                    String.class,GenericClassForList<Person>.class,
                                    ResourcePoolsBuilder.heap(100000)).withExpiry(Expirations.timeToLiveExpiration(Duration.of(60000,
                                    TimeUnit.SECONDS))));
        }
}

但是,在GenericClassForList<Person>.class如下所示的这行代码中,它向我显示了红色标记(错误):

.newCacheConfigurationBuilder(
                                String.class,GenericClassForList<Person>.class,

我无法初始化缓存,因为它向我显示:

无法从参数化类型中选择

我的泛型类有什么问题,或者我怎样才能让我的缓存能够识别这个泛型类?我的缓存没有让我初始化这个泛型类。

4

1 回答 1

0

正如错误消息所说,替换GenericClassForList<Person>.classGenericClassForList.class

为什么编译器不允许这样做。因为类型擦除

“类型擦除确保不会为参数化类型创建新类;因此,泛型不会产生运行时开销”

于 2019-09-06T09:27:47.320 回答