专栏首页源哥的专栏一个用来保存参数的容器类

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

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();
    }
}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • js中判断字符串是否为合法的email格式

    源哥
  • 多媒体处理类

    import java.io.*; import java.util.*; import javax.servlet.http.*;

    源哥
  • 实现无刷新的进度条功能(采用xmlhttp技术)

    我这里采用xml技术来实现进度条的功能,我这里假设加上有几个运行量非常大的存储过程,执行每一个所需要消耗的时间都很久,这里在页面上显示进度条功能,每执行完一个存...

    源哥
  • CentOS中部署Docker并配置Nginx

    有暗香盈袖
  • 基础知识 | 每日一练(136)

    士人有百折不回之真心,才有万变不穷之妙用。立业建功,事事要从实地着脚,若少慕声闻,便成伪果;讲道修德,念念要从虚处立基,若稍计功效,便落尘情。 ...

    闫小林
  • binder,hwbinder,vndbinder之间的关系

    先复制一段来自于android官方文档的文字 https://source.android.google.cn/devices/architecture/hid...

    刘盼
  • 系统权限服务创建桌面进程(进程也是系统权限)

    为什么要创建系统权限服务.首先.强调权限一说. 我们创建的系统服务默认是系统权限的.然后系统权限(System)创建我们的进程.那么也是系统权限.我们的进程如果...

    IBinary
  • 北漂你后悔了吗?“失败”的北漂十年经历,真的尽力了...

    在我离开北京的时候,我还依稀记得,十年前我对朋友说过的那句话:我一定要留在北京,因为那里有梦想。

    纯洁的微笑
  • RK61 蓝牙机械键盘配合 karabiner 软件适配 MAC 系统脚本

    RK61 蓝牙机械键盘配合 karabiner 软件适配 MAC 系统脚本 在 mac 升级到 10.12 之后,karabiner 软件就一直在开发中。以至于...

    FungLeo
  • 深入理解Go GC

    GC(Garbage Collection)在计算机科学中是一种自动的存储器管理机制。当一个计算机上的动态存储器不再需要时,就应该予以释放,以让出存储器,这种存...

    咻咻ing

扫码关注云+社区

领取腾讯云代金券