随笔-0  评论-0  文章-24  trackbacks-0
Java Varargs可以方便方法的重载,允许你指定可以采用多个同类型参数的方法,而不需要事先确定参数的数目,由此实现可变参数。Varargs形式如同 TYPE...name,只能位于参数列表的最后,name可以看做一个TYPE数组,可以包括TYPE及其子类型,通过for/in可以方便的访问每个参数。参数传递的方式可以是单个的元素,也可以是数组,但不能是元素和数组的混合形式。

本文采用Java可变参数实现了一个求最大值的函数,代码如下
    // 求最大值
    public static int max(int values) throws IllegalArgumentException {
        
// 无参时抛出异常
        if (values.length == 0)
            
throw new IllegalArgumentException("Argument number can't be zero");
        
int max = Integer.MIN_VALUE;
        
for (int i : values)
            
if (max < i)
                max 
= i;
        
return max;
    }
测试方法main
    public static void main(String args) {
        
try {
            System.out.println(max(
372));
            System.out.println(max(
new int[] { 945 }));
            
// 以下无法通过编译,不能为混合形式
            
// System.out.println(max(new int[] { 1, 7, 4 }, 3));

            System.out.println(max(
new Integer(1), new Integer(5))); // 自动拆箱
            System.out.println(max(7new Integer(3)));

            
// Integer[] is = {3,4,5,6};
            
// 以下无法通过编译,不能自动转换Integer[]到int[]
            
// System.out.println(max(is));

            System.out.println(max()); 
// 此时有IllegalArgumentException抛出
        } catch (IllegalArgumentException iae) {
            System.out.println(iae);
        }
    }
运行结果
7
9
5
7
java.lang.IllegalArgumentException: Argument number can't be zero

可以从此处下载源代码

有些时候,我们可能要避免自动化的将Object...转化成Object[],比如说我们要将一个Object[]类型的对象objectArray作为Object传进带Object...参数的方法,为了避免objectArray被拆散为许多单个的object,我们必须要这么写:
new Object[] {objectArray},或者强转(Object)objectArray。
posted on 2009-06-02 16:19 chenkkkabc 阅读(377) 评论(0)  编辑  收藏 所属分类: java特性