Digamos que você tem um código que, por reflexão, usa a classe Resolucao12 para chamar o método designacao:
package br.gov.anvisa;
import java.lang.reflect.Method;
public class Main {
public static void main(String[] args) throws Exception {
Class classe = Class.forName("br.gov.anvisa.resolucoes.Resolucao12");
Object objeto = classe.newInstance();
Method metodo = classe.getMethod("designacao");
System.out.println(metodo.invoke(objeto));
}
}
Não há dependência em compile time a essa classe Resolucao12. Precisamos dela apenas em runtime.
Você resolveu usar Java 9 no seu projeto e criou um módulo:
module br.com.alexandreaquiles.projeto {
}
Por padrão, todo módulo “puxa” o java.base, que disponibiliza pacotes como java.lang, java.math, java.util e java.io.
Vamos dizer que seu código usa o JDBC. Pra poder ter acesso a interfaces como Connection e PreparedStatement, você precisa dizer que usa o módulo java.sql: