[Livro Reflexão e Anotações] Dúvida acesso classe Singleton

java-ee

#1

Senhores, criei um classe singleton e estou tentando acessar um método, mas ao criar o objeto esta dando erro de acesso a um membro privado.
Class br.com.sicoob.sisbr.cds.entidades.infraestrutura.cache.ReflectionCache can not access a member of class br.com.sicoob.sisbr.cds.entidades.infraestrutura.cache.CacheDominioValor with modifiers “private”

Veja a classe Singleton que criei:

package br.com.sicoob.sisbr.cds.entidades.infraestrutura.cache;

import br.com.sicoob.sisbr.cds.entidades.negocio.entidades.DominioValor;

public final class CacheDominioValor extends AbstractCache {

private static CacheDominioValor uniqueInstance = null;

private CacheDominioValor() {
}

public static CacheDominioValor getInstance() {
	if (uniqueInstance == null) {
		uniqueInstance = new CacheDominioValor();
	}
	return uniqueInstance;
}

public DominioValor obterDominioValor() {
	return new DominioValor(1);
}

}

O main p/ teste:

public static void main(String[] args) throws InstantiationException, IllegalAccessException, NoSuchMethodException, SecurityException, IllegalArgumentException, InvocationTargetException {

List listResult = new ArrayList();

	Reflections r = new Reflections(PACKAGE, new SubTypesScanner(false),
			ClasspathHelper.forClassLoader());

	Set<Class<? extends AbstractCache>> classes = r
			.getSubTypesOf(AbstractCache.class);

	for (Class<? extends AbstractCache> clazz : classes) {
		String nameClass = clazz.getName().replace(PACKAGE, "");

		// Visibilidade dos metodos
		setMetodosVisible(clazz.getDeclaredMethods());

		// Visibilidade dos campos
		setFieldsVisible(clazz.getDeclaredFields());

		// Visibilidade dos construtores
		setConstrutorVisible(clazz.getDeclaredConstructors());
		
		Object o = clazz.newInstance(); // Erro aqui !!!

		String metodo = "obter" + nameClass;

		Method method = clazz.getMethod(metodo);

		CDSEntidade entidade = (CDSEntidade) method.invoke(o);

		listResult.add(entidade);
	}
	return listResult;
}
    
    private void setMetodosVisible(Method[] declaredMethods) {
	for (Method method : declaredMethods) {
		if (Modifier.isPrivate(method.getModifiers())) {
			method.setAccessible(true);
		}
	}
}

private void setFieldsVisible(Field[] declaredFields)
		throws IllegalArgumentException, IllegalAccessException {
	for (Field field : declaredFields) {
		if (Modifier.isPrivate(field.getModifiers())) {
			field.setAccessible(true);
		}
	}
}

private void setConstrutorVisible(Constructor[] constructors)
		throws IllegalArgumentException, InstantiationException,
		IllegalAccessException, InvocationTargetException {

	for (Constructor declaredConstructor : constructors) {
		if (Modifier.isPrivate(declaredConstructor.getModifiers())) {
			declaredConstructor.setAccessible(true);
			declaredConstructor.newInstance();
		}
	}
}

}