慕尼黑的夜晚无繁华
很少有实际用例能够评估String作为Java代码的一个片段是必要的或可取的。也就是说,询问如何做到这一点实际上是XY问题:你实际上有一个不同的问题,可以用不同的方法来解决。先问问自己,这是怎么回事String你想要评估的是从哪里来的?您的程序的另一部分是生成它,还是由用户提供输入?我程序的另一部分生成了它因此,您需要程序的一部分来决定要执行的操作的类型,而不是执行操作,以及执行所选操作的第二个部分。而不是生成和计算String,使用战略, 命令或建筑商设计模式,视具体情况而定。它是用户输入。*用户可以输入什么都行,包括在执行时可能导致程序行为不当、崩溃、公开应该是机密的信息、损坏持久信息(例如数据库内容)以及其他此类恶意的命令。防止这种情况的唯一方法是解析String你自己,检查它是不是恶意的,然后评估它。但是,自己解析它是所要求的大部分工作。eval函数就行了,所以你什么也救不了自己。更糟糕的是,检查Java不是恶意的不可能,因为检查这是停止问题.它是用户输入,但要计算的允许文本的语法和语义受到很大限制。:没有任何通用工具能够轻松地为您选择的任何受限语法和语义实现通用解析器和评估器。您需要做的是为您选择的语法和语义实现一个解析器和评估器。如果任务很简单,可以编写一个简单的递归下降或者是有限状态机解析器。如果任务很困难,可以使用编译器-编译器(如ANTLR)为您做一些工作。我只想实现一个桌面计算器!家庭作业,嗯?如果可以使用提供的eval功能,这不是一个家庭作业,是吗?你的程序会有三行长。您的老师可能希望您为一个简单的算术解析器/评估器编写代码。有着众所周知的算法,调车场,你可能会觉得有用。