arquivo arquivo classes.prop
java.util.List = java.util.ArrayList
java.util.Map = java.util.HashMap
saída
class java.util.ArrayList
class java.util.HashMap
Principal.java
public class Principal {
public static void main(String[] args) throws Exception {
Mapeador mapeador = new Mapeador();
mapeador.load("s:\\classes.prop");
System.out.println(mapeador.getImplementacao(List.class));
System.out.println(mapeador.getImplementacao(Map.class));
}
}
Mapeador.java
import java.io.FileInputStream;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
public class Mapeador {
// retorna um map de interfaces / classes
private Map<Class<?>, Class<?>> mapa = new HashMap<>();
public void load(String nomeArquivo) throws Exception {
// carrega classe propriedades
Properties p = new Properties();
// le do arquivo
p.load(new FileInputStream(nomeArquivo));
// percorre todas as chaves (valores na frente do "=")
for (Object key : p.keySet()) {
// declara 2 classes sem saber quais são
Class<?> interf;
Class<?> impl;
try {
// carrega as classes (no caso a interface) pelo nome
interf = Class.forName(key.toString());
// carrega classes pelo nome (valor da chave do arquivo)
impl = Class.forName(p.get(key).toString());
} catch (Exception e) {
throw new RuntimeException(
key.toString() + " não é interface ou " + p.get(key).toString() + " não é uma classe");
}
//System.out.println(key.toString() + " - " + p.get(key).toString());
// valida se é interface
if (!interf.isInterface()) {
throw new RuntimeException(interf.getName() + " não é interface");
}
// valida se uma pode implementar a outra
if (!interf.isAssignableFrom(impl)) {
throw new RuntimeException("a classe " + impl.getName() + " não implementa " + interf.getName());
}
// coloca no map
mapa.put(interf, impl);
}
}
public Class<?> getImplementacao(Class<?> interf) {
return mapa.get(interf);
}
}