Object…valuesの使い方


public abstract List find(String hql,Object…values);
[color=blue]Object...valuesは、Object[]values、配列[/color]とも考えられます。
可変パラメータ(Varrgs)
可変パラメータは、プログラマが可変数のパラメータを受け入れる方法を宣言することができます。可変パラメータは
関数宣言の最後のパラメータです。簡単な方法を書いてオブジェクトを印刷すると仮定します。
util.write(Obj 1)
util.write(Obj 1、Obj 2)
utill.write(Obj 1、Obj 2、Obj 3)

JDK 1.5の前に、私達は積載で実現できますが、このように多くの積載関数を書く必要があります。
あまり効果がないです。可変パラメータを使うなら、私たちは一つの関数だけが必要です。
public void write(Object…Objs){
for(Object obj:Objs)
System.out.println(obj)
)
可変パラメータを導入すると、Javaの反射パケットもより便利になります。に対する
c.get Method(「test」,new Object[0]).invoke(c.newInstance(),new
Object[0])は、今はこう書くことができます。
c.get Method(「test」).invoke(c.newInstance())は、このようなコードが元より多く分かりました。
[color=darkblue]反射時の可変パラメータ[/color]
public class ReflectValues {
public static void main(String args[]) throws Exception{
// , ,
test("hehehe",9L,"heihei","heng");
test("hehehe",9L,new String[]{"heihei","heng"});

// , ,
Method m = ReflectValues.class.getMethod("test", new Class[]{String.class,Long.class,String[].class});
m.invoke(null, new Object[]{"hehe",9L,new String[]{"heihei","heng","hah"}});// m.invoke(null, "hehe",9L,new String[]{"heihei","heng","hah"});
m.invoke(null, new Object[]{"hehe",9L,"heihei","heng"});// java.lang.IllegalArgumentException: wrong number of arguments

// : , java.lang.NoSuchMethodException
Method m2 = ReflectValues.class.getMethod("test", new Class[]{String.class,Long.class,String.class,String.class});
m2.invoke(null, "hehehe",9L,"heiheihei","hengheng");// ,
}

public static void test(String a,Long b,String...strings){
System.out.println(a);
System.out.println(b);
for(String s : strings){
System.out.println(s);
}
}

/**
* 1. ! JVM 。
* 2. , , , ;
* 3. , , !
*/
}