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();
}
}
}
}