关于java 泛型设计接口 导致的参数类型不匹配问题
我想大声告诉你
我想大声告诉你 2017-05-17 10:00:20
0
1
492

1.设计了一个接口用于包装其它 pojo,以计算是否过期

public interface CatchWrapper{ public long getCatchedTime(); public T getValue(); public boolean valid(); }

某一个实现:

public class DeviceCatchWrapper implements CatchWrapper { private final long catchedTime; private final Device device; private static final long CATCH_TIME = 20*1000; public DeviceCatchWrapper(Device device) { this.device = device; catchedTime = System.currentTimeMillis(); } @Override public long getCatchedTime() { return catchedTime; } @Override public Device getValue() { return device; } @Override public boolean valid() { return System.currentTimeMillis() - catchedTime < CATCH_TIME; } }

另有一个管理类,主要是删除过期的缓存

public class DeviceCatchWrapperManager { private static final ScheduledExecutorService service = Executors.newSingleThreadScheduledExecutor(); private final ConcurrentMap> catchStore; private final long initialDelay; private final long delay; private TimeUnit unit; private volatile boolean stop = false; public DeviceCatchWrapperManager(ConcurrentMap> catchStore, long initialDelay, long delay, TimeUnit unit) { this.catchStore = catchStore; this.initialDelay = initialDelay; this.delay = delay; this.unit = unit; } /** * 周期性检查过期的缓存,然后删除 */ public void startLoop() { service.scheduleWithFixedDelay(new Runnable() { @Override public void run() { for (Entry> entry : catchStore.entrySet()) { if (stop) break; String key = entry.getKey(); CatchWrapper cw = entry.getValue(); if (!cw.valid()){ System.out.println("Device catch manager --------------->remove:"+key); catchStore.remove(key, cw); } } } }, initialDelay, delay, unit); } /** * 停在对缓存进行过期检查 */ public void stop() { stop = true; service.shutdownNow(); } }

但是真正构造函数 传参数报错

private final ConcurrentMap catchMap = new ConcurrentHashMap<>(); 下面的报错,参数不对 private final DeviceCatchWrapperManager catchManager = new DeviceCatchWrapperManager(catchMap, 2, 2, TimeUnit.HOURS);

改怎么解决这个错误 或者 该怎么设计接口或者改进呢?

我想大声告诉你
我想大声告诉你

全部回复 (1)
Peter_Zhu

ConcurrentMapDeviceCatchWrapper> catchMap = new ConcurrentHashMap<>();这句有问题
改成ConcurrentMapCatchWrapper> catchMap = new ConcurrentHashMapDeviceCatchWrapper>();试试

    最新下载
    更多>
    网站特效
    网站源码
    网站素材
    前端模板
    关于我们 免责声明 Sitemap
    PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!