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();
}
}
分享到:
相关推荐
`outState`参数是一个Bundle对象,它是一个键值对的容器,可以用来存储各种类型的数据,如基本类型、字符串、数组、集合、自定义对象等。在`onSaveInstanceState()`中,你需要将需要保存的状态信息添加到这个Bundle...
为了保存摄像头的视频流,我们需要一个媒体容器,如AVI或MP4,以及编码器将图像帧转换为可存储的数据。AForge.NET提供`AVIWriter`类用于创建AVI格式的视频文件。下面是如何使用它的示例: ```vb.net Dim video...
Intent是一种用来表达应用程序之间意图的类,可以理解为一个消息对象,它告诉系统你要执行什么操作。在实现页面跳转时,我们通常创建一个新的Intent实例,并指定目标Activity(即要跳转到的页面)。以下是一个简单的...
- 示例中的`Test3_2`类中创建了一个`Card`类型的数组`books`,以及一个`Card`类型的对象`card`。 2. **数组的操作**: - 数组是一种基本的数据结构,用于存储同类型元素的集合。 - `books`数组用于存储多个`Card...
ViewPager是一个可以左右滑动切换页面的视图容器,非常适合用于图片浏览。首先,我们需要创建一个适配器,继承自`PagerAdapter`,并将下载的图片路径列表传入。 ```java public class ImagePagerAdapter extends ...
2、写一个类用来模拟栈这种数据结构,要求底层 使用数组存储数据, 并给出相应的进栈和出栈的方法。MyStack int arr[]; int count;//栈中元素个数 public MyStack(int n){ arr = new int[n]; } boolean push(int ...
在Java应用服务器的世界里,Apache Tomcat是一款广泛使用的开源Servlet容器。它负责解析并执行Java Servlets以及服务JSP(JavaServer Pages)。本篇文章将深入探讨Tomcat的启动参数配置和监控参数设置,以及如何利用...
Servlet引擎利用Java类载入工具载入一个Servlet,Servlet引擎可以从一个本地的文件系统、一个远程的文件系统以及网络载入Servlet。 Servlet的初始化 Servlet引擎载入Servlet后,Servlet引擎必须对Servlet进行初始化...
- **定义**: 继承是面向对象编程的一个核心概念,它允许一个类继承另一个类的属性和方法。 - **特点**: - 子类可以继承父类的非私有成员。 - 子类还可以添加自己的成员或覆盖父类的方法。 - **用途**: 继承机制...
参数 列分隔符号, 文本型, , 用来把一行里的每列内容用符号分开如(,) .参数 行分隔符号, 文本型, , 用来把一行用符号分开如(#换行符) .子程序 保存超级列表框至TXT通用对话框型, , 公开 .参数 通用对话框, 通用...
Either类型用于处理两种可能的结果,它是一个包含两个类型参数的容器,通常用来表示一个值要么是正确的,要么是错误的。Future类型则是Scala中用于处理异步操作的类型,它代表一个可能尚未完成的计算结果。 Promise...
DXGI是DirectX的一个组件,它提供了一个低级别的接口来管理图形设备和交换链。在屏幕截图方面,我们可以利用DXGI的复制呈现目标(CopyResource)功能来获取当前屏幕的帧数据。通过创建一个DXGI共享资源,然后将其...
Overloaded methods是名称重载方法,方法的名称重载是指同一个类中具有多个方法,使用相同的名称而只是其参数列表不同。Overridden methods是覆盖重载方法,方法的覆盖重载是指父类和子类使用的方法采用同样的名称、...
如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overloading)。Overloaded的方法是可以改变返回值的类型。 18、error和exception有什么区别? error 表示恢复...
1. **Mat类基本介绍**:`Mat`类在OpenCV中扮演着矩阵的角色,可以用来表示二维数组,比如图像数据。它可以存储单一类型的数据,如整数、浮点数或者像素颜色通道的组合。 2. **创建Mat类**:`Mat`类可以通过不同的...
子菜单也是一个GooContextMenu类对象,保存在父结点所在菜单GooContextMenu类对象的$childMenu数组中, 一些方法调用实际上为递归式调用。 菜单显示不再以鼠标事件发生点e为坐标,会根据浏览器视窗的大小以及菜单的...
子菜单也是一个GooContextMenu类对象,保存在父结点所在菜单GooContextMenu类对象的$childMenu数组中, 一些方法调用实际上为递归式调用。 菜单显示不再以鼠标事件发生点e为坐标,会根据浏览器视窗的大小以及菜单的...
在控件编程中,我们可能会创建一个泛型容器类,它可以接受任何类型的对象,如`public class MyGenericControl<T> where T : class`。这里的`where`关键字是用来添加约束的,确保`T`必须是类类型。这个泛型控件可以...
- **JPanel**:这是一个基本的容器类,可以用来组织其他组件,并设置布局管理器来控制这些组件的位置和大小。 - **JLabel**:用于显示文本或图像。 - **JTextArea**:用于编辑多行文本。 - **JButton**:表示按钮,...
组合节点持有一个Component类型的容器,用来存储它的子节点。 #### 2.5 Flyweight模式 **定义**: Flyweight模式用于减少大量相同或相似对象的内存消耗。 **应用场景**: 当系统中有大量相似对象时,可以通过共享...