Exemplo 1

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

 }

}