Nesnenin örneğini döndürmek için kullanılan yönteme sahibim. Yansımayı kullanmak, sınıf örneğini iyi alıyorum. Aynı sınıf için her seferinde yeni bir nesne oluşturmamaya ihtiyacım var. Bir şey mi özlüyorum? İşte Yansıma kullanılarak birden çok nesne oluşturulmasını nasıl önleyebilirim?
private static final ConcurrentMap<String, FutureTask<Object>> INSTANCES = new ConcurrentHashMap<>();
private static Object getInstance(String clazz) throws InterruptedException, ExecutionException {//full path of the class in the clazz
FutureTask<Object> task = new FutureTask<>(() -> Class.forName(clazz).newInstance());
FutureTask<Object> previous = INSTANCES.putIfAbsent(clazz, task);
if (previous == null) {
task.run();
} else {
task = previous;
}
return task.get();
}
aynı kod ama Java 1.7 için
private static final ConcurrentMap<String, FutureTask<Object>> INSTANCES = new ConcurrentHashMap<>();
private static Object getInstance(final String clazz) throws InterruptedException, ExecutionException {//full path of the class in the clazz
FutureTask<Object> task = new FutureTask<>(new Callable<Object>() {
@Override
public Object call() throws Exception {
return Class.forName(clazz).newInstance();
}
});
FutureTask<Object> previous = INSTANCES.putIfAbsent(clazz, task);
if (previous == null) {
task.run();
} else {
task = previous;
}
return task.get();
}
Önbellek olarak bir Harita 'ye ihtiyacınız var gibi geliyor ... –
instanceOf yöntemini kontrol edebilirsiniz. – Gopal00005
... veya IoC kabı kullanın –