Я пытаюсь уничтожить объекты из хэш-карты, если они не были использованы через некоторое время.Использование дженериков
У меня есть карты на разных типах объектов и вы хотите обработать их с помощью дженериков, чтобы избежать дублирования кода.
private Map<String,EvictableObject<ObjectA>> _objectsA = new HashMap<String,EvictableObject<ObjectA>>();
private Map<String,EvictableObject<ObjectB>> _objectsB = new HashMap<String,EvictableObject<ObjectB>>();
private Map<String,EvictableObject<ObjectC>> _objectsC = new HashMap<String,EvictableObject<ObjectC>>();
private Map<String,EvictableObject<ObjectD>> _objectsD = new HashMap<String,EvictableObject<ObjectD>>();
private void startEvictionTask() {
Runnable evictionTask = new Runnable() {
public void run() {
runEviction(_objectsA);
runEviction(_objectsB);
runEviction(_objectsC);
runEviction(_objectsD);
}
private void runEviction (Map<String, EvictableObject<?>> table) {
final long expirationPeriod = 60 * 60 * 1000; // 60 minutes (in ms)
synchronized (table) {
for (Map.Entry<String,EvictableObject<? extends Object>> entry : table.entrySet()) {
if (entry.getValue().getAccessedSince() > expirationPeriod)
table.remove(entry.getKey());
}
}
}
};
MyThreadPool.getScheduledExecutor().scheduleWithFixedDelay(evictionTask, 65*60, 5*60, TimeUnit.SECONDS);
}
Но ни одно из того, что я пробовал, похоже, не является декларацией метода runEviction. И компилятор продолжает говорить, что фактический аргумент не может быть преобразован в объявленный параметр метода.
Я пробовал:
private void runEviction (Map<String, EvictableObject<?>> table)
,
private void runEviction (Map<String, EvictableObject<B>> table)
,
private void runEviction (Map<String, EvictableObject<B extends Object>> table)
и
private void runEviction (Map<String, EvictableObject<? extends Object>> table)
ли нет способа сделать это?
Какие ошибки у вас возникают? –
'ObjectA',' ObjectB' .... так далее..разные классы? и каждый из них ничего не расширяет? –
@Lee Meador Я получаю: runEviction (java.util.Map) в не может быть применен к (java.util.Map >) –
loopkin