一个用来保存参数的容器类

import java.util.*;

/** * 提供一个保存参数的容器,用来给那些参数多、可选参数多、参数易变的方法提供参数读取能力。 * 直接使用Map等类对于数据类型处理不是方便。本类提供常用数据类型的读取方法。用法示例:<br> * port = args.get("port",8080);<br> * 放入Map中的port值可以是"8443"或new Integer(8443)或其他任何类型,只要toString() * 能够解析出一个整数。 * @author sunlen * @version 1.0 */public class Args{    /** 一个常量空参数表。用于传递空参数,该参数列表已经锁定,不能修改。*/    public static final Args EMPTY = new Args().lock();

    /** 参数列表是否已经锁定,锁定后的参数列表将只读。*/    boolean locked;

    /** Map保存的参数。*/    Map args;

    /** 创建空参数列表。*/    public Args()    {        this(new HashMap());    }

    /**     * 用Map创建参数。     * @param theArgs 保存参数的Map对象。     */    public Args(Map theArgs)    {        if (theArgs==null)        {            throw new NullPointerException("argument is null");        }        args = theArgs;    }

    /**     * 取得字符串参数的方法。     * @param key 参数名。     * @param def 参数值。     */    public String get(String key,String def)    {        try        {            return args.get(key).toString();        }        catch (Exception ex)        {            return def;        }    }

    /**     * 取得整数参数的方法。     * @param key 参数名。     * @param def 参数值。     */    public int get(String key,int def)    {        try        {            return Integer.parseInt(args.get(key).toString());        }        catch (Exception ex)        {            return def;        }    }

    /**     * 取得长整数参数的方法。     * @param key 参数名。     * @param def 参数值。     */    public long get(String key,long def)    {        try        {            return Long.parseLong(args.get(key).toString());        }        catch (Exception ex)        {            return def;        }    }

    /**     * 取得浮点数参数的方法。     * @param key 参数名。     * @param def 参数值。     */    public float get(String key,float def)    {        try        {            return Float.parseFloat(args.get(key).toString());        }        catch (Exception ex)        {            return def;        }    }

    /**     * 取得布尔参数的方法。只有"true"解析成true其他解析成false。     * @param key 参数名。     * @param def 参数值。     */    public boolean get(String key,boolean def)    {        try        {            return ("true".equals(args.get(key)));        }        catch (Exception ex)        {            return def;        }    }

    /**     * 取得原始对象类型。     * @param key 参数名。     * @param def 参数缺省值。     */    public Object get(String key,Object def)    {        try        {            Object obj = args.get(key);            if (obj==null)            {                return def;            }            return obj;        }        catch (Exception ex)        {            return def;        }    }

    /**     * 往当前参数表中添加一个参数。     * @param key 参数名。     * @param value 参数值。     * @return 添加了新参数后的参数表(对象实例没有变)。     * @exception UnsupportedOperationException 如果参数列表已经被锁定。     */    public Args set(String key,Object value)    {        if(locked)        {            throw new UnsupportedOperationException(                      "Args have locked,can modify");        }        args.put(key,value);        return this;    }

    /**     * 往当前参数表中添加一个参数。     * @param key 参数名。     * @param value 参数值。     * @return 添加了新参数后的参数表(对象实例没有变)。     * @exception UnsupportedOperationException 如果参数列表已经被锁定。     */    public Args set(String key,int value)    {        if(locked)        {            throw new UnsupportedOperationException(                  "Args have locked,can modify");        }        args.put(key,new Integer(value));        return this;    }

    /**     * 往当前参数表中添加一个参数。     * @param key 参数名。     * @param value 参数值。     * @return 添加了新参数后的参数表(对象实例没有变)。     * @exception UnsupportedOperationException 如果参数列表已经被锁定。     */    public Args set(String key,boolean value)    {        if(locked)        {            throw new UnsupportedOperationException(                                            "Args have locked,can modify");        }        args.put(key,new Boolean(value));        return this;    }

    /**     * 往当前参数表中添加一个参数。     * @param key 参数名。     * @param value 参数值。     * @return 添加了新参数后的参数表(对象实例没有变)。     * @exception UnsupportedOperationException 如果参数列表已经被锁定。     */    public Args set(String key,long value)    {        if(locked)        {            throw new UnsupportedOperationException(                  "Args have locked,can modify");        }        args.put(key,new Long(value));        return this;    }

    /**     * 往当前参数表中添加一个参数。     * @param key 参数名。     * @param value 参数值。     * @return 添加了新参数后的参数表(对象实例没有变)。     * @exception UnsupportedOperationException 如果参数列表已经被锁定。     */    public Args set(String key,float value)    {        if(locked)        {            throw new UnsupportedOperationException("Args have locked,can modify");        }        args.put(key,new Float(value));        return this;    }

    /**     * 往当前参数表中添加一个参数。     * @param key 参数名。     * @param value 参数值。     * @return 添加了新参数后的参数表(对象实例没有变)。     * @exception UnsupportedOperationException 如果参数列表已经被锁定。     */    public Args set(String key,double value)    {        if(locked)        {            throw new UnsupportedOperationException(                  "Args have locked,can modify");        }        args.put(key,new Double(value));        return this;    }

    /**     * 锁定参数列表。锁定后该参数列表将变成只读的,任何对set()方法的调用都将抛出     * UnsupportedOperationException异常。已经锁定的参数表再次调用本方法没有任何影响。     * @return 锁定后的参数列表(对象实例没有变)。     */    public Args lock()    {        locked = true;        return this;    }

    /**     * 参数列表的字符串描述。     * @return 所有参数值。     */    public String toString()    {        return args.toString();    }}

时间: 2024-08-03 16:42:12

一个用来保存参数的容器类的相关文章

验证码-为什么一个jsp页面获取另一个jsp页面保存的session值为空呢?

问题描述 为什么一个jsp页面获取另一个jsp页面保存的session值为空呢? 在Javaweb中,我用一个jsp页面生成一个验证码图片并用session保存图片上的数字,然后又在另一个denglu.jsp页面用标签导入该图片,可是首次打开denglu.jsp时图片上有显示数字(我在denglu.jsp我也同时输出验证码的值)我发现第一次访问时session的值为null之后在访问就是session就是记录图片上一次的值(比如刚启动服务器打开denglu.jsp,图片上的值为1234,那么se

android-写入文件然后读取,然后再像一个字符串一样保存内容

问题描述 写入文件然后读取,然后再像一个字符串一样保存内容 我想写进一个文件,然后,我想把内容保存在一个 StringBuffer 里面.最后再通过一个 TextView显示,但是什么也不显示. public class MainActivity extends Activity { String finall; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceS

你好,在activiti中能实现点击某个任务框,然后然后弹出一个面板来输入参数吗?

问题描述 你好,在activiti中能实现点击某个任务框,然后然后弹出一个面板来输入参数吗? 你好,在activiti中能实现点击某个任务框,然后然后弹出一个面板来输入参数吗? 解决方案 你连这个都不会呀?不就是dialog嵌入edittext吗? 解决方案二: 可以啊,给任务框控件添加点击事件,点击后弹出你自定义的带有edittext的dialog

keychain-ios 开发,同一台iPhone上的一个app,保存有一个文档,想让另一个app跟它共享这个文档

问题描述 ios 开发,同一台iPhone上的一个app,保存有一个文档,想让另一个app跟它共享这个文档 网上查到有使用keychain的,但是都是只提到了,具体怎么用,写的都不清楚.有没有大神们,用到这一机制,可不可以提供详细的使用步骤啊??3Q3Q3Q啦#^_^#

未能加载文件或程序集“Pager”或它的某一个依赖项。参数错误。

问题描述 未能加载文件或程序集"Pager"或它的某一个依赖项.参数错误. 未能加载文件或程序集"Pager"或它的某一个依赖项.参数错误. (异常来自 HRESULT:0x80070057 (E_INVALIDARG)) 按照网上的方法 (删除 C:/WINDOWS/Microsoft.NET/Framework/v2.0.50727/Temporary ASP.NET files 文件夹. 请注意:上面说的解决方法只是用与.NET 2.0编译器下. 如果你在VS

httpurlconnection-求教一个向Webservice传递参数被转码的错误!

问题描述 求教一个向Webservice传递参数被转码的错误! 我用下面的方式调用一个webservice的方法,传递的strWhere这个参数里面写了个字段模糊匹配的sql语句" strWhere=IDCARD LIKE '%1234567890%' ",在将该参数向webservice传递过去后,webservice那边收到的字符串是将该字符串里面的第一个"%"和后面紧跟着的两位数字进行了转义,显示为"IDCARD LIKE '34567890%'&q

以一个链表指针作参数传入一个函数里,若此时链表为空,则初始化链表,为什么在主函数中不能用?

问题描述 以一个链表指针作参数传入一个函数里,若此时链表为空,则初始化链表,为什么在主函数中不能用? #include using namespace std; typedef struct Node { int age; struct Node* next; }LIST; void addList1(LIST* pHead,int x)//链表结尾加节点 { LIST* pM=new LIST();//新节点 pM->age=x; pM->next=NULL; if(pHead==NULL)

javascript-JavaScript 如何在arcgis地图上画一个面并保存为图片

问题描述 JavaScript 如何在arcgis地图上画一个面并保存为图片 求大神,在arcgis地图上画一个长方形面,如何把这个面保存成为一张图片 解决方案 http://zhidao.baidu.com/link?url=Im31uXgOUY2noPZmyzK-YwZSqBx2FetS5e0HlYrWdGSIgV4bQTqoTv7lWkVEvZoqsLBTPucqcD31Fc51qgjvoT1yLZnn8tHpetGnsNvfsrK

一个简单的MySQL参数导致的连接问题解惑

最近在做一套MySQL环境的数据迁移,需要把一部分数据从一个站点迁移到另外一个站点,新站点是一套全新的环境,对于MySQL的安装采用了同事建议的二进制方式.当然安装的过程比起Oracle的安装看起来要简单很多了.基本做到了一键安装的程度.因为对于MySQL还是有很多的盲点,所以感觉还是有些心虚,当然态度是虚心的了.可能很多问题处理起来就不会像Oracle那样理直气壮了.这可能也是好事. 数据库安装很快就做好了,而且里面的很多参数也采用了一定的规则去匹配一些参数值,所以自己也没做其它的改变就直接使