`

java版 eval函数实现

    博客分类:
  • java
阅读更多
今天在一本书上看到eval(String str)函数,它是javascript的一个函数,其作用是执行str这个字符串包含的内容。如:
var stra=textbox_name.value+".value=10;";

把一个textbox_name的value和字符串组成一个新的字符串,假如其值是abc。那么将有一下结果:
str="abc.value=10;";

需要把这个字符串变成一个执行语句,使abc的值是10,那么需要执行下列语句:
eval(str);

这样,这个字符串就变成了表达式或语句,开始执行了。在javascript中,这样的功能有时候非常有用,对于动态构造变量是很有意义的。
其实。对于java而言,也同样会遇到这样的一个需求,例如下面的情况.
public void callClassMethod(int id){
TheClass tc = new ThisClass();
if(id==1){
tc.method_1();
}
if(id==2){
tc.method_2();
}
if(id==3){
tc.method_3();
}
}


如果在TheClass中有 100个方法呢?这样写程序实在太麻烦了,如果能这样实现的话,那是多么美妙的事情。
public void callClassMethod(int id){
TheClass tc=new ThisClass()p
eval(tc.methd_"+id+"()");
}

那怎么去实现这个eval()函数呢,这个时候就要用到“动态编译”技术了,下面是一个例子程序。
import java.io.File;
import java.io.PrintWriter;
import java.io.FileWriter;
import java.lang.reflect.*;

public class Javact{
public static void main(String[] args){
Javact jc=new Javact();
jc.eval("input_str");
}
Public static void eval(String str){
System.out.println(System.getProperty("user.dir"));
String s="class Temp{";
s+="  public static String call(String[] ss){";
s+="  System.out.println(\""+str+"\")'";
s+="  return \"return str\";";
s+="}";
s+="}";

try{
File f=new FIle(Temp.java);
PrintWriter pw=new PrintWriter(new FileWriter(f));
pw.println(s);
pw.close();

//动态编译
com.sun.tools.javac.Main javac=new com.sun.tools.javac.Main();
String[] commadline={"-d",System.getProperty("user.dir"),"Temp.java"};
int status=javac.compile(commadline);
if(status!=0){
System.out.println("没有成功编译源文件");
}
}catch(Exception e){

}try{
Class cls=Class.forName("Temp");
//映射call方法
method call=cls.getMethod("call",new Class[]{String[].class});
//执行call方法
System.out.println(call.invoke(null,new Object[]{new String[0]}));
}catch(Exception se){
}

} 

}

分享到:
评论
1 楼 lankk 2017-01-10  
这代码自己都不跑一下就放上来了

相关推荐

    java实现eval函数

    然而,如果你提供的压缩包"java实现eval函数"包含的是一个Java项目,那么它很可能是实现了类似功能的自定义解决方案,可能是一个解析器或者编译器,用于处理特定的表达式或脚本语法。这个项目可能包括以下几个部分:...

    javascript 自定义eval函数实现

    JavaScript中的`eval()`函数是一个非常强大但又颇具争议的功能,它允许执行一个字符串作为JavaScript代码。在本讨论中,我们将深入探讨如何自定义`eval()`函数以提高代码的安全性和效率,同时也会涉及到JavaScript的...

    java实现js中eval功能

    在JavaScript中,`eval()`函数是一个非常特殊且强大的工具,它能够将字符串作为JavaScript代码...文档"无数据库无第三方包——表达式求值JAVA版eval().doc"可能提供了更具体的实现细节,建议查阅该文档以获取更多信息。

    利用eval()函数给树节点统一添加单击事件实现新建选项卡功能

    这篇博客“利用eval()函数给树节点统一添加单击事件实现新建选项卡功能”探讨了一个具体的JavaScript编程技巧,如何通过eval()函数来处理用户交互,特别是针对树形结构数据的点击事件,进而实现新的选项卡功能。...

    java动态特性eval

    这些库通常支持简单的数学运算、逻辑判断以及对Java对象的操作,可以用来实现类似JavaScript`eval()`的功能,但可能无法处理复杂的语句或函数。 5. **安全与性能考虑**: 使用上述技术进行动态编程时,必须注意...

    在java中利用动态编译实现eval

    在Java中,实现类似`eval`功能的一种方法是利用Java的动态编译API,例如`javax.tools.JavaCompiler`接口和相关的工具类。以下是一个简单的示例,演示如何将字符串转换为Java方法并执行: ```java import javax....

    java解析公式 eval.jar

    Java解析公式库`eval.jar`是一个专门为Java开发者设计的开源工具,它允许程序在运行时动态解析和执行数学表达式。这个库的核心功能是提供一个简单、高效的接口,用于处理包含加法(+)、减法(-)、乘法(*)、除法...

    Java类似JavaScript的eval实现,和随机4个数计算24点

    在Java中,没有内置的`eval`函数,像JavaScript那样可以直接执行字符串形式的代码。但是,我们可以模拟实现一个类似的函数,来解析并计算简单的数学表达式。以下是一个基于给定内容的简化的Java `Eval` 类实现: ``...

    JavaREPL是一个Java语言读入-求值-打印-循环(Read-Eval-Print-Loop)功能实现

    JavaREPL,全称为Java Read-Eval-Print Loop,是Java开发者的一种实用工具,它允许程序员在交互式环境中测试代码片段、快速实验新概念或调试程序。REPL是许多编程语言的标准特性,如Python和Lisp,而在Java世界中,...

    j4locr_eval

    在Java开发中,使用OCR库可以实现自动识别图像中的文字,例如从扫描的文档、图片或者屏幕截图中提取文本。J4L OCR(Java for Leptonica OCR)可能是基于Leptonica,这是一个广泛使用的图像处理库,而j4locr_eval可能...

    Java数学表达式计算(Expression Evaluator)

    本主题将深入探讨如何在Java中实现一个数学表达式计算器,这通常被称为"Expression Evaluator"。我们将讨论相关的技术和库,以及如何通过源码分析来理解和创建这样一个工具。 首先,Java标准库提供了`java.lang....

    ExprEval.rar_ExprEval_java 计算器_java表达式运算_jep-3.1.0-trial.jar_表达式

    在Java编程语言中,开发一个能够解析和计算数学表达式的工具是常见的需求,"ExprEval.rar"中的"ExprEval_java 计算器"就是这样一个实现。这个程序允许用户输入类似于传统数学作业中的表达式,然后自动进行计算。它...

    Python学习笔记整理之输入输出、python eval函数

    在Python中,输入和输出是通过`input`和`print`函数实现的。`print`函数可以接受多个参数,并在必要时自动换行。例如,在提供的小程序中,`print("The average of ", number1, number2, number3, "is", average)`会...

    java调用js代码实现动态配置

    ### Java调用JS代码实现动态配置 在现代软件开发中,动态配置的需求越来越普遍,特别是在不希望频繁重启服务的情况下更新业务逻辑或算法时。本文将详细介绍如何利用Java调用JavaScript来实现这一目标,并通过一个...

    java调用R语言实现数据挖掘

    ### Java调用R语言实现数据挖掘的关键知识点 #### 一、使用R开发数据挖掘平台 在数据科学领域,R语言以其强大的统计分析能力和丰富的库支持而受到广泛欢迎。结合Java的强大功能,可以构建高效的数据挖掘平台。为了...

    Java直接运行JS代码

    在Java编程环境中,有时我们需要与JavaScript交互,例如执行一些动态脚本...开发者可以轻松地在Java程序中执行JavaScript代码,调用JavaScript函数,甚至传递Java对象到JavaScript环境,从而实现两者之间的协同工作。

    Z.Expressions.Eval.2.4.2

    总的来说,Z.Expressions.Eval 2.4.2 是一个强大且灵活的库,为Java开发者提供了便捷的表达式处理工具,使得在各种项目中实现自定义计算逻辑变得更加简单和高效。通过深入理解和熟练运用,你可以利用它的功能来提升...

    Python学习笔记整理3之输入输出、python eval函数

    ### Python学习笔记整理3之输入输出、python eval函数 #### Python中的变量 在Python中,变量的声明方式与C++、Java等静态类型语言不同,它不需要显式地指定变量的数据类型(例如`int`、`float`)。这是因为Python...

    java实现的计算器(界面程序)

    对于复杂的计算,可能需要用到eval()函数或者自定义的表达式解析算法。 为了使计算器更易于使用,还可以增加清除(CE)、删除(C)、括号、百分比等功能按钮,以及支持连续运算。此外,可以考虑添加错误处理机制,...

Global site tag (gtag.js) - Google Analytics