gpt4 book ai didi

java - 在运行时执行Java程序中的脚本

转载 作者:行者123 更新时间:2023-11-29 03:54:13 27 4
gpt4 key购买 nike

我在计算产品价格时遇到了这个问题,但由于营销计划、折扣、税收......,公式几乎每天都在变化......

所以我认为如果我能编写如下代码这样的代码就太好了,这样我就可以在运行时更改脚本。

public BigDecimal calculate(String script) {
return (BigDecimal) ScriptEngine.execute(script);
}

有什么方法可以使用 Java 实现吗?

最佳答案

是:使用 Scripting API .

有一些实现可以运行用 JavaScript、Groovy、Python 和许多其他语言编写的脚本。

[编辑]

既然在评论中提到:要警惕安全问题。

有几个选项:

  1. 您允许最终客户提供脚本(比如以网络形式)
  2. 您不允许客户提供脚本;如果需要更改脚本,管理员或开发人员必须启动特定工具。
  3. 你开发了一个只允许执行“安全”脚本的系统

选项 #3 不起作用(= 仅适用于最简单的情况)。有一个数学证明,一个计算机程序永远无法知道另一个程序在不实际执行它的情况下可能做什么。

因此,如果您不允许调用方法(或只允许调用非常非常有限的一组方法),您可以使用选项 #3。但是大多数脚本语言都允许访问 Java 类,这意味着您最终可以获得 System.exit()Runtime.exec()。这反过来意味着您必须编写一个解析器,以确保代码不包含奇怪的东西。

您必须每天更新,因为客户会想出新的……呃……有趣的方式来使用该功能。

您也有可能会犯错误——要么解析器不接受有效输入,要么让恶意代码通过。考虑到问题的复杂性,可能性在 99.9999% 到 100% 之间。

选项 #1 意味着根本没有安全性,但在第三次更改之后,客户会责备您采用它。它会工作一段时间,直到第一个脚本小子出现并破坏一切。猜猜这是谁的错?雇用他侄子的经理……那个 child ?

因此,人类将不得不观察脚本,修复其中的所有错误,并配置系统以运行它们。选项 #2 也会引起各种悲伤,但考虑到所有因素,它会减少悲伤。

关于java - 在运行时执行Java程序中的脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7270172/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com