此公式解析系统能够计算各种算术运算、逻辑运算和比较运算,可以连接本地函数,支持括号分级,允许逐级设置公式内临时变量,提供了分支运算符,并且支持 Json 数据格式的运算。系统编写中使用了很多设计方法,包括概念抽取、继承、多态、面向接口设计、枚举、递归、工厂等等。数据结构也使用了好用但少见的双端队列。很适合对应情况的实用以及学习 Java 的设计思路、编程方式。本程序由 Shane Loo LI 设计和编写,所有的细节都注重了运行效率,在很多细节上都制作了数倍优于爪哇(Java)系统类库的方法;由于只需要处理公式,所以语法树结构单一,也因此保证了比现有其它注入语言的代码解释器更高的执行速度。
详细使用方法参看:
http://blog.csdn.net/shanelooli/article/details/8142726
代码片段和文件信息
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2012-11-02 14:03 expressionProject
文件 241 2012-10-11 10:11 expressionProject.classpath
文件 393 2012-10-11 09:54 expressionProject.project
目录 0 2012-11-02 14:03 expressionProjectant
文件 25 2012-05-11 14:57 expressionProjectantuild-all.bat
文件 1014 2012-11-02 11:42 expressionProjectantuild.properties
文件 27745 2012-11-02 14:02 expressionProjectantuild.xml
文件 22419 2012-11-02 12:22 expressionProjectantdoc.xml
目录 0 2012-11-02 14:03 expressionProjectantlog
文件 231 2012-04-01 18:22 expressionProjectantpause
目录 0 2012-11-02 14:02 expressionProjectclasses
目录 0 2012-11-02 14:02 expressionProjectconf
目录 0 2012-11-02 14:03 expressionProjectlib
目录 0 2012-11-02 14:03 expressionProjectlibuild
文件 224277 2006-11-02 11:46 expressionProjectlibuildant-contrib-1.0b3.jar
文件 6654 2012-04-05 10:13 expressionProjectlibuildYUIAnt-zh_CN.jar
文件 891148 2011-09-28 16:25 expressionProjectlibuildyuicompressor-2.4.7.jar
目录 0 2012-11-02 14:03 expressionProjectsrc-main
目录 0 2012-11-02 14:03 expressionProjectsrc-maincn
目录 0 2012-11-02 14:03 expressionProjectsrc-maincnspads
目录 0 2012-11-02 14:03 expressionProjectsrc-maincnspadswogs
目录 0 2012-11-02 14:03 expressionProjectsrc-maincnspadswogsdata
目录 0 2012-11-02 14:03 expressionProjectsrc-maincnspadswogsdatasys
文件 4319 2012-11-02 11:47 expressionProjectsrc-maincnspadswogsdatasysDataobject.java
文件 1724 2012-11-02 11:47 expressionProjectsrc-maincnspadswogsdatasysSimpleDataobject.java
目录 0 2012-11-02 14:03 expressionProjectsrc-maincnspadswogsexp
文件 9878 2012-11-02 11:47 expressionProjectsrc-maincnspadswogsexpEvaluator.java
文件 3524 2012-11-02 11:47 expressionProjectsrc-maincnspadswogsexpEvaluatorFactory.java
文件 1242 2012-11-02 11:47 expressionProjectsrc-maincnspadswogsexpExpException.java
文件 1636 2012-11-02 11:47 expressionProjectsrc-maincnspadswogsexpexpression.java
文件 16687 2012-11-02 11:47 expressionProjectsrc-maincnspadswogsexpexpressionFactory.java
............此处省略85个文件信息
/**
* 公式解析系统
* Dataobject.java independently from 2012-4-8 上午03:11:18
* ---------- ---------- ---------- ----------
* Copyright(c) 2012-2022 Spads
* E-mail: Surmounting@gmail.com
* ---------- ---------- ---------- ----------
* 公式解析系统能够计算各种算术运算、逻辑运算和比较运算,可以连接本地函数,支持括号
* 分级,允许逐级设置公式内临时变量,提供了分支运算符,并且支持 Json 数据格式的运算。
*/
package cn.spads.wogs.data.sys;
import java.util.Map;
import cn.spads.wogs.lang.JsonBuilder;
/**
* 数据对象接口
* 本接口用以描述每日限免精选中的数据对象。最终数据将通过 {@link Map}<{@link String}
* {@link object}> 来表现。在实用过程中,数据对象将用于直接将数据内容通过
* {@link JsonBuilder} 来生成 Json 字符串。此接口主要用于通过程序逐渐将生成、获取的
* 数据记录进来;在一般的实现中,此接口规定的方法对数据的取出很难做到好的支持。
* 一般来说,我们可以按照 Java Bean 的规范制作数据保存对象,比如:
*
* public class Person
* {
* private String name;
* public void setName(String name) { this.name = name; }
* public String getName() { return this.name; }
* }
*
* 然后在此基础上实现 Dataobject 接口:
*
* public class Person extends Dataobject
* {
* private String name;
* public void setName(String name) { this.name = name; }
* public String getName() { return this.name; }
* public Mapject> getDataMap()
* {
* Mapject> data = new java.util.HashMapject>();
* data.put(“name“ this.name);
* return data;
* }
* public void setData(String key object value)
* {
* if (“name“.equals(key)) this.setName(value.toString();
* }
* public object getData(String key)
* {
* if (“name“.equals(key)) return this.getName();
* return null;
* }
* }
*
* 这样的好处是数据存储对象可以根据实用情况,来决定将耗时过程集中在
* {@link #getDataMap()} 里,还是通过制作私有 Map
成员变量以分散在
* 每一次具体数据项的写入中。通过此例我们也可以看出,由于无法根据 key
* 的内容转变getData(String key)
方法返回值的类型,所以不得不引入
* 类型强制转换。这将给程序的健壮性造成非常大的隐患。所以郑重推荐程序内部通过传统
* 的 getter 和 setter 方式记录、获取数据。
*
* @author Shane Loo Li
* @version 1.1.0 2012-4-8 Sunday
* @see JsonBuilder#buildJson(object)
* @since Java 6.0
*/
public interface Dataobject
{
/**
* 获取数据集映射。本方法不限定返回的数据集映射之来源,但要求通过
* {@link #setData(String object)} 记录的数据应包含在此映射中。另外对于无
* 数据项的情况,应返回空的 Map
而不是 null
。
* @return 数据集映射
*/
abstract public Mapject> getDataMap();
/**
* 注册数据。对于已存在键的重复写入,应覆盖掉原值。这意味着数据值必须能够接受
* null
。此方法并不要求一定有意义地实现,可以直接抛出
* {@link IllegalAccessException} 表明不可执行。
* @see #getDataMap()
* @param key 数据对象中各种数据的键,可以理解为唯一标识。
* @param value 数据值。
* @exception NullPointerException 如果 key == null 则抛出此异常。
*/
abstract public void setData(String key object value) throws IllegalAccessException;
/**
* 获取数据。以 {@link object} 方式获取数据。此方法并不要求一定有意义地实现,
* 可以直接抛出 {@link IllegalAccessException} 表明不可执行。
* @param key 数据对象中各种数据的键,可以理解为唯一标识。
* @return 指定键对应的数据
* @exception NullPointerException 如果 key == null 则抛出此异常。
*/
abstract public object getData(String key) throws IllegalAccessExcept
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2012-11-02 14:03 ex
文件 241 2012-10-11 10:11 ex
文件 393 2012-10-11 09:54 ex
目录 0 2012-11-02 14:03 ex
文件 25 2012-05-11 14:57 ex
文件 1014 2012-11-02 11:42 ex
文件 27745 2012-11-02 14:02 ex
文件 22419 2012-11-02 12:22 ex
目录 0 2012-11-02 14:03 ex
文件 231 2012-04-01 18:22 ex
目录 0 2012-11-02 14:02 ex
目录 0 2012-11-02 14:02 ex
目录 0 2012-11-02 14:03 ex
目录 0 2012-11-02 14:03 ex
文件 224277 2006-11-02 11:46 ex
文件 6654 2012-04-05 10:13 ex
文件 891148 2011-09-28 16:25 ex
目录 0 2012-11-02 14:03 ex
目录 0 2012-11-02 14:03 ex
目录 0 2012-11-02 14:03 ex
目录 0 2012-11-02 14:03 ex
目录 0 2012-11-02 14:03 ex
目录 0 2012-11-02 14:03 ex
文件 4319 2012-11-02 11:47 ex
文件 1724 2012-11-02 11:47 ex
目录 0 2012-11-02 14:03 ex
文件 9878 2012-11-02 11:47 ex
文件 3524 2012-11-02 11:47 ex
文件 1242 2012-11-02 11:47 ex
文件 1636 2012-11-02 11:47 ex
文件 16687 2012-11-02 11:47 ex
............此处省略85个文件信息
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件举报,一经查实,本站将立刻删除。
评论列表(条)