`

Object... values的用法

    博客分类:
  • Java
阅读更多
public abstract List find(String hql, Object... values);
Object... values,你也可以认为是Object[] values,数组.

可变参数(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()),这样的代码比原来清楚了很多。

反射时的可变参数
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. 带可变参数的方法,在以反射的方式调用它时,必须把可变参数当数组处理!
	*/
}
分享到:
评论
1 楼 Fs_sky 2013-04-15  
谢了,太厉害了!

相关推荐

    深入解析 JavaScript 中的 Object.keys、Object.values 和 Object.entries

    其中,Object.keys()、Object.values() 和 Object.entries() 是最常用的方法。本文将详细探讨这三个方法的区别、用途以及如何在实际开发中使用它们。 Object.keys()、Object.values() 和 Object.entries() 是 ...

    js代码-Object.keys()和Object.values()的简单用法。

    在JavaScript中,`Object.keys()`和`Object.values()`是两个非常重要的内置方法,它们用于处理对象的属性。本文将深入探讨这两个方法的用法、功能和相关知识点。 ### `Object.keys()` `Object.keys()`方法返回一个...

    Object.values:符合ES2017规范的Object.values填充程序

    如果不可用或不Object.values则调用其“ shim”方法来填充Object.values 。 该软件包实现了接口。 它可以在ES3支持的环境中工作并符合。 最常见的用法: var assert = require ( 'assert' ) ;var values = require ...

    object.keys()用法!!!!!

    Object.keys()方法与其他方法,例如Object.entries()和Object.values(),有着不同的应用场景和返回结果。 * Object.keys()方法返回一个数组,数组中的每一项是对象中的一个可枚举的属性名。 * Object.entries()方法...

    在原生不支持的旧环境中添加兼容的Object.keys实现方法

    在上面的代码中,我们使用了一个自执行函数来实现兼容的 Object.keys 方法。 在这个方法中,我们首先定义了一个 hasOwnProperty 方法,它是 Object.prototype 上的一个方法,用于检测对象自身是否拥有某个属性。 `...

    Object.entries:符合ES2017规范的Object.entries填充程序

    如果不可用或不Object.entries则调用其“填充”方法对Object.entries进行填充。 该软件包实现了接口。 它可以在ES3支持的环境中工作并符合。 最常见的用法: var assert = require ( 'assert' ) ; var entries =...

    object.filter:已弃用。 改用过滤器值

    标准的方法是使用`for...in`循环或者`Object.keys()`、`Object.values()`或`Object.entries()`配合`Array.prototype.filter()`来实现。例如,如果我们有一个对象`obj`,想要过滤出值为偶数的属性,我们可以这样做: ...

    前端JavaScript es8语法学习

    其中,`Object.values()`和`Object.entries()`是非常实用的两个方法。`Object.values()`用于返回一个对象所有可枚举属性值的数组,而`Object.entries()`则返回一个由对象的[键,值]对组成的数组,这对于遍历和操作...

    ExtJs4.1.0 A(Web版) 有部分是中文版

    获取所有对象的key组成的数组 var values = Ext.Object.getKeys({ name: 'Jacky', loves: 'food' }); // ['name', 'loves'] ... Ext.Object view sourcegetSize( Object object ) : Number 获取此对象的所有自有...

    object-values:获取对象的值

    对象值获取对象的值返回对象自己的可...安装 $ npm install object-values用法 const objectValues = require ( 'object-values' ) ;objectValues ( { foo : 0 , bar : 1 } ) ;//=> [0, 1]执照麻省理工学院:copyright:

    Q.js:js工具库,包括 通用方法、原生对象扩展、队列、JSON、Cookie、Storage、Ajax、JSONP、事件处理、DOM处理等

    Q.js js工具库,包括 原生对象扩展、通用方法、队列、JSON、Cookie、Storage、Ajax、JSONP、事件... Object.values(obj) //获取对象所有值 Object.size(obj) //获取项数量 Object.hasItem(obj) //对象是否拥有子项 S

    ognl.MethodFailedException

    标题 "ognl.MethodFailedException" 指的是在使用OGNL(Object-Graph Navigation Language)表达式语言时遇到的方法执行失败异常。OGNL是一种强大的表达式语言,常用于Java应用程序,特别是Spring MVC和Struts 2框架...

    详解Javascript中的Object对象

    在ES6中,推荐使用`Object.getPrototypeOf()`或`Object.setPrototypeOf()`来操作原型链。 - `prototype` 是用于定义构造函数的属性,当创建新实例时,新实例的`__proto__`将引用`prototype`。 2. `toString()` 和 ...

    当然--Object_methods

    在本篇文章中,我们将深入探讨这些方法,包括它们的功能、用法以及如何在实际编程中应用。 1. `Object.create()`: 这个方法创建一个新的对象,并将该对象的原型设置为指定的对象,即创建一个继承自给定对象的新对象...

    K2 BlackPearl 开发

    在本文中,我们将深入探讨K2 BlackPearl开发中的核心概念和API调用方法,重点关注sourcecode.workflow.client、sourcecode.workflow.management以及sourcecode.smartobject.client命名空间。这些命名空间为K2开发...

    ECMAScript® 2016 7th Language Specification.pdf

    - **用法示例**: `let values = Object.values(obj);`, `let entries = Object.entries(obj);` - **意义**: 使得获取对象的属性值和键值对变得更加方便。 4. **String.prototype.includes()** - **功能**: 检查...

    JS Hash对象

    遍历Hash对象可以使用`for...in`循环,或者搭配`Object.keys()`、`Object.values()`、`Object.entries()`方法: ```javascript // Using for...in loop for(let key in hash) { console.log(`Key: ${key}, Value: ...

    JS中如何轻松遍历对象属性的方式总结

    例如,如果需要忽略继承的属性,可以使用`Object.keys()`、`Object.values()`或`Object.entries()`;如果需要包括所有属性,包括不可枚举和继承的,可以使用`for...in`循环。在遍历过程中,还可以结合`...

    第七单元.pptx_电子版_pptx版

    本篇将详细探讨`Object.assign()`方法及其相关的知识点。 首先,`Object.assign()`是JavaScript中的一个内置方法,用于合并或复制一个或多个源对象到目标对象。然而,它执行的是浅拷贝。这意味着如果源对象中的属性...

Global site tag (gtag.js) - Google Analytics