我是靠谱客的博主 魔幻冥王星,最近开发中收集的这篇文章主要介绍Object... values的用法,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

public abstract List find(String hql, Object... values);
[color=blue]Object... values,你也可以认为是Object[] values,数组.[/color]

可变参数(Varargs)

  可变参数使程序员可以声明一个接受可变数目参数的方法。注意,可变参数必须是
函数声明中的最后一个参数。假设我们要写一个简单的方法打印一些对象,
util.write(obj1);
util.write(obj1,obj2);
util.write(obj1,obj2,obj3);

  在JDK1.5之前,我们可以用重载来实现,但是这样就需要写很多的重载函数,显得
不是很有效。如果使用可变参数的话我们只需要一个函数就行了
public void write(Object... objs) {
   for (Object obj: objs)
      System.out.println(obj);
}
  在引入可变参数以后,Java的反射包也更加方便使用了。对于
c.getMethod("test", new Object[0]).invoke(c.newInstance(), new 
Object[0])),现在我们可以这样写了
c.getMethod("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. 带可变参数的方法,在以反射的方式调用它时,必须把可变参数当数组处理!
*/
}

最后

以上就是魔幻冥王星为你收集整理的Object... values的用法的全部内容,希望文章能够帮你解决Object... values的用法所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(37)

评论列表共有 0 条评论

立即
投稿
返回
顶部