Z3R0:
Tengo un requisito de las reglas del convertido presentar en formato JSON en la base de datos de código en Java en tiempo de ejecución.
Por ejemplo,
{
"id": "g-KqVJwrEMUYNOEVEnNxxqc",
"rules": [
{
"id": "r-2VC4YQOkYu-lxkGgMABRc",
"field": "firstName",
"value": "Steve",
"operator": "="
},
{
"id": "r-B2Dd6eHO1rsZ-t1mfPk33",
"field": "lastName",
"value": "Vai",
"operator": "="
}
],
"combinator": "and",
"not": false
}
Las teclas de la JSON se conocen de antemano. También los campos y valores de operador serán fijos y conocidos.
Pero estoy perplejo en cuanto a cómo convertir algo similar a la anterior con el código,
inputObject.firstName.equals("Steve") && inputObject.lastName.equals("Vai")
¿Alguna pista, pensamientos es muy apreciada!
OscarRyz:
Puede utilizar la introspección para evaluar campos en tiempo de ejecución
Se vería algo como esto
Command command = parseJson(input); // transform input into a java object
InputObject o = getItFromSomewhere();
bool finalResult;
// process each rule
for ( Rule r: command.rules ) {
var fieldValue = o.getClass().getField(r.field).get(o);
var currentResult;
switch(r.operator) {
case "=": currentResult = fieldValue.equals(r.value);
break;
case ">": currentResult = ....
..etc
}
// combine it with previous results;
switch(command.combinator) {
case "and":
finalResult = finalResult && currentResult;
break;
case "or":
finalResult = finalResult || currentResult;
}
}
System.out.println(finalResult);
Obviamente, esto no es el código exacto, pero sólo para mostrar cómo recuperar dinámicamente un valor de campo en tiempo de ejecución y evaluarla.