Saltar al contenido

¿Hay una función eval () en Java?

Hemos estado buscando en el mundo on line para así traerte la solución a tu problema, si tienes alguna duda puedes dejar la inquietud y te responderemos con gusto.

Solución:

Puedes usar el ScriptEngine clase y evaluarlo como un Javascript string.

ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("js");
Object result = engine.eval("4*5");

Puede haber una mejor manera, pero esta funciona.

No hay una clase o método estándar de Java que haga lo que usted quiere. Sus opciones incluyen:

  • Seleccione y use alguna biblioteca de evaluación de expresiones de terceros. Por ejemplo, JEL o cualquiera de las media docena de bibliotecas enumeradas aquí.

  • Envuelva la expresión en el código fuente de Java para una clase con un eval envíelo al compilador de Java y luego cargue la clase compilada resultante.

  • Utilice algún lenguaje de secuencias de comandos que se pueda llamar desde Java como evaluador de expresiones. Las posibilidades incluyen Javascript, BeanShell, etc.

  • Escriba su propio evaluador de expresiones desde cero.

El primer enfoque es probablemente el más simple. Los enfoques segundo y tercero son un riesgo de seguridad potencial si obtiene la expresión para ser evaluada por un usuario que no es de confianza. (Piense en la inyección de código).

Hay muy pocos casos de uso reales en los que poder evaluar un String como un fragmento de código Java es necesario o deseable. Es decir, preguntar cómo hacer esto es realmente un problema XY: en realidad tienes un problema diferente, que se puede resolver de otra manera.

Primero pregúntese, ¿de dónde salió esto? String que desea evaluar provienen? ¿Otra parte de su programa lo generó, o fue una entrada proporcionada por el usuario?

  • Otra parte de mi programa lo generó.: entonces, desea que una parte de su programa decida el tipo de operación a realizar, pero no realice la operación, y una segunda parte que realice la operación elegida. En lugar de generar y luego evaluar un Stringutilice el patrón de diseño Estrategia, Comando o Constructor, según corresponda a su caso particular.

  • es entrada de usuario: el usuario podría ingresar cualquier cosa, incluidos los comandos que, cuando se ejecutan, pueden hacer que su programa se comporte mal, se bloquee, exponga información que debería ser secreta, dañe información persistente (como el contenido de una base de datos) y otras cosas desagradables. La única manera de evitar eso sería analizar el String usted mismo, verifique que no haya sido malicioso y luego evalúelo. Pero analizarlo usted mismo es gran parte del trabajo que solicitó evalfuncionaría, por lo que no se ha ahorrado nada. Peor aún, comprobar ese arbitrario Java no fue malicioso es imposibleporque comprobar que es el problema de detención.

  • Es una entrada del usuario, pero la sintaxis y la semántica del texto permitido para evaluar están muy restringidas.: Ninguna instalación de propósito general puede implementar fácilmente un analizador y evaluador de propósito general para cualquier sintaxis y semántica restringida que haya elegido. Lo que debe hacer es implementar un analizador y un evaluador para la sintaxis y la semántica elegidas. Si la tarea es simple, puede escribir a mano un analizador simple de descenso recursivo o de máquina de estados finitos. Si la tarea es difícil, puede usar un compilador-compilador (como ANTLR) para que haga parte del trabajo por usted.

  • ¡Solo quiero implementar una calculadora de escritorio!: Una tarea, ¿eh? Si pudiera implementar la evaluación de la expresión de entrada utilizando un eval función, no sería una gran tarea, ¿verdad? Su programa tendría tres líneas de largo. Su instructor probablemente espera que escriba el código para un analizador/evaluador aritmético simple. Hay un algoritmo bien conocido, patio de maniobras, que puede resultarle útil.

Recuerda que puedes recomendar este enunciado si te fue de ayuda.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags : / /

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *