2010-04-14 166 views
19

我有一个接受可变数量的参数的函数:Java的可变参数函数参数

foo (Class... types); 

在我得到一定数量类类型。接下来,我想有一个功能

bar(??) 

这将接受可变数量的参数为好,并能够验证变量相同数目(这很容易)和同类型的(硬部分),如foo中所述。

我该怎么做?

编辑:澄清,一个电话可能是:

foo (String.class, Int.class); 
bar ("aaa", 32); // OK! 
bar (3); // ERROR! 
bar ("aa" , "bb"); //ERROR! 

而且,foo和bar是同一类的方法。

+0

我不明白你的要求。 “与foo中指定的数字相同的数字”是什么意思?没有这样的号码。每次调用foo都可以使用不同数量的参数。 – duduamar 2010-04-14 06:19:20

+0

oracle文档将任意参数描述为“可变参数”:http://docs.oracle.com/javase/tutorial/java/javaOO/arguments.html。基本上只是一个数组,因为它是Ruby和其他编程语言。 – JohnMerlino 2014-06-13 20:53:49

回答

33

事情是这样的:

private Class<?>[] types; 

public void foo(Class<?>... types) 
{ 
    this.types = types; 
} 

public boolean bar(Object... values) 
{ 
    if (values.length != types.length) 
    { 
     System.out.println("Wrong length"); 
     return false; 
    } 
    for (int i = 0; i < values.length; i++) 
    { 
     if (!types[i].isInstance(values[i])) 
     { 
      System.out.println("Incorrect value at index " + i); 
      return false; 
     } 
    } 
    return true; 
} 

例如:

test.foo(String.class, Integer.class); 
test.bar("Hello", 10); // Returns true 
test.bar("Hello", "there"); // Returns false 
test.bar("Hello"); // Returns false 

(很明显,你会想改变的结果是如何报告?可能使用无效数据异常。)