Estoy trasteando con un proceso de Gobernanza de datos para un proyecto en el que trabajo y he visto una manera interesante de pasar parámetros a la clase Main.
Map cli = parseArgs(Arrays.copyOfRange(args, 1, args.length));
Con esto, el primer parámetro viene siendo la «elección de menú», que va a ejecutar uno de los distintos subprocesos disponibles.
A partir del segundo, recuperamos los parámetros por parejas por su nombre y los guardamos en un Map disponible posteriormente.
String db = cli.getOrDefault("--db", "");
String table = cli.getOrDefault("--table", "");
String out = cli.getOrDefault("--out", "out");
La llamada a la clase Main quedaría así.
com.example.lake.Main 1 --db db_name --table table_name
Se puede tener tantos parámetros como sean necesarios siempre que se incluya un valor default para ellos que evite el error.
Esto utiliza el método…
private static Map<String, String> parseArgs(String[] args) {
System.out.println("Parsing arguments: " + Arrays.toString(args));
Map<String, String> m = new HashMap<>();
for (int i = 0; i < args.length; i++) {
if (args[i].startsWith("--")) {
String key = args[i];
String val = (i + 1 < args.length && !args[i+1].startsWith("--")) ? args[++i] : "";
m.put(key, val);
}
}
return m;
}