14/11/2025

Un tratamiento elegante del paso de parámetros en un proceso

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