- 浏览: 1473639 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (523)
- JAVA (334)
- J2EE (18)
- JSP (21)
- JavaScript (14)
- it life (2)
- mobile develop (4)
- UBUNTU (14)
- Algorithm (14)
- DataBase (56)
- Browser/Server (1)
- linux (6)
- fedora (2)
- CSS (1)
- AjAX (3)
- HTML5 (1)
- EJB (1)
- osworkflow (2)
- Java face (5)
- spring (4)
- ICE (1)
- webService (2)
- MongoDB (1)
- JavaThread (4)
- JavaCollections (3)
- Hibernate (2)
- JavaMail (1)
- JavaBasic (1)
- Cache (1)
- https (4)
- DOM4J (1)
- JDOM (0)
- Mybatis (1)
- JUNIT (1)
- eclipse (1)
- easyMock (2)
最新评论
-
yadongliang:
...
自己认为的一些技术点 -
yadongliang:
每次看你头像都看的荷尔蒙分泌失调
WebService的两种方式SOAP和REST比较 (转) -
yadongliang:
hollo 写道一直有这种感觉,盲目的跟风,确实有一些人为了潮 ...
WebService的两种方式SOAP和REST比较 (转) -
welss:
博主,JNative怎么调用dll中的这种方法: int ...
JNative调用DLL -
Java_Antelope:
session.setAttribute和session.getAttribute(
java invoke 反射的使用方法
悬赏分:30 | 解决时间:2010-8-18 12:08 | 提问者:azhqgu
public class TaskProvidePropsList {
private int provide_id;
private int props_sign;
public int getProvide_id() {
return provide_id;
}
public void setProvide_id(int provide_id) {
this.provide_id = provide_id;
}
public int getProps_sign() {
return props_sign;
}
public void setProps_sign(int props_sign) {
this.props_sign = props_sign;
}
}
这是个很简单的实体。我现在想请教高手帮忙写一个invoke的实例,就是调用所有的set方法,进行赋值,然后通过所有的get方法取值,打印出值来。就要这样一个例子。分不够可以加。
问题补充:
tespo 你写的是指定方法名吧?有没有方法可以自己遍历所有的方法的。然后动态执行?
最佳答案
你这个类是一个严格的JavaBean格式。。所以先可以获得属性。。然后获得读写方法。。然后写值。。读值。。hibernate其实也就是采用的这种差不多的方式。。
import java.beans.PropertyDescriptor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
public class ReflectTest {
/**
* @param args
*/
public static void main(String[] args) throws Exception {
Class clazz = Class.forName("TaskProvidePropsList");//这里的类名是全名。。有包的话要加上包名
Object obj = clazz.newInstance();
Field[] fields = clazz.getDeclaredFields();
//写数据
for(Field f : fields) {
PropertyDescriptor pd = new PropertyDescriptor(f.getName(), clazz);
Method wM = pd.getWriteMethod();//获得写方法
wM.invoke(obj, 2);//因为知道是int类型的属性,所以传个int过去就是了。。实际情况中需要判断下他的参数类型
}
//读数据
for(Field f : fields) {
PropertyDescriptor pd = new PropertyDescriptor(f.getName(), clazz);
Method rM = pd.getReadMethod();//获得读方法
Integer num = (Integer) rM.invoke(obj);//因为知道是int类型的属性,所以转换成integer就是了。。也可以不转换直接打印
System.out.println(num);
}
}
}
对我有帮助
9
回答时间:2010-8-6 21:16 | 我来评论
向TA求助
回答者: Jseven_jy | 九级采纳率:33% 名人
擅长领域: JAVA相关 程序设计
参加的活动: 暂时没有参加的活动
提问者对于答案的评价:
谢谢
其他回答 共2条
package zhidao.baidu.com;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
public class TaskProvidePropsList {
private int provide_id;
private int props_sign;
public int getProvide_id() {
return provide_id;
}
public void setProvide_id(int provide_id) {
this.provide_id = provide_id;
}
public int getProps_sign() {
return props_sign;
}
public void setProps_sign(int props_sign) {
this.props_sign = props_sign;
}
public static void main()throws Exception{
Class<?> c=Class.forName("zhidao.baidu.com");
Field f[]=c.getDeclaredFields();
String[] fieldName=new String[f.length];
String[] fieldType=new String[f.length];
//取得属性名及取类型
for(int i=0;i<f.length;i++){
fieldName[i]=f[i].getName();
fieldType[i]=f[i].getType().getName();
}
}
//调用set方法,输入类名(String)属性名,属性值,及属性类型
public static void setter(String className,String att,Object value,Class<?> type){
try{
Object obj=Class.forName(className).newInstance();
Method met=obj.getClass().getMethod("set"+initStr(att), type);
met.invoke(obj, value);
}catch(Exception e){
e.printStackTrace();
}
}
//调用get方法,输入类名,属性名。
public static void getter(String className,String att){
try{
Object obj=Class.forName(className).newInstance();
Method met=obj.getClass().getMethod("get"+initStr(att));
System.out.println(met.invoke(obj));
}catch(Exception e){
e.printStackTrace();
}
}
//对属性名进行处理,以便获得得get,set方法
public static String initStr(String old){
return old.substring(0, 1).toUpperCase()+old.substring(1);
}
}
回答者: 553563608 | 三级 | 2010-8-6 20:47
import java.lang.reflect.*;
public class Test{
public static void main(String args[]) throws Exception{
Class c=Class.forName("TaskProvidePropsList");
Object obj=c.newInstance();
//set
Method msetid=c.getMethod("setProvide_id",Integer.TYPE);
msetid.invoke(obj,new Integer(100));
Method msetsign=c.getMethod("setProps_sign",Integer.TYPE);
msetsign.invoke(obj,new Integer(100));
//get
Method mgetsign=c.getMethod("getProps_sign");
Integer sign=(Integer)mgetsign.invoke(obj);
Method mgetid=c.getMethod("getProvide_id");
Integer id=(Integer)mgetid.invoke(obj);
//打印
System.out.println("Props_sign:"+sign.intValue());
System.out.println("Provide_id:"+id.intValue());
}
}
遍历所有方法的代码:
Class c=Class.forName("TaskProvidePropsList");
Object obj=c.newInstance();
Method all[]=c.getMethods();
boolean isset[]=new boolean[all.length];
int i=0;
//按顺序打印
for(i=0;i<all.length;i++){
String name=all[i].getName();
isset[i]=name.startsWith("set");
if(isset[i]) all[i].invoke(obj,new Integer(100));
}
for(i=0;i<all.length;i++){
if(!isset[i]){
Integer val=all[i].invoke(obj);
String name=(all[i].getName()).substring(3);
System.out.println(name+":"+val.intValue());
}
}
悬赏分:30 | 解决时间:2010-8-18 12:08 | 提问者:azhqgu
public class TaskProvidePropsList {
private int provide_id;
private int props_sign;
public int getProvide_id() {
return provide_id;
}
public void setProvide_id(int provide_id) {
this.provide_id = provide_id;
}
public int getProps_sign() {
return props_sign;
}
public void setProps_sign(int props_sign) {
this.props_sign = props_sign;
}
}
这是个很简单的实体。我现在想请教高手帮忙写一个invoke的实例,就是调用所有的set方法,进行赋值,然后通过所有的get方法取值,打印出值来。就要这样一个例子。分不够可以加。
问题补充:
tespo 你写的是指定方法名吧?有没有方法可以自己遍历所有的方法的。然后动态执行?
最佳答案
你这个类是一个严格的JavaBean格式。。所以先可以获得属性。。然后获得读写方法。。然后写值。。读值。。hibernate其实也就是采用的这种差不多的方式。。
import java.beans.PropertyDescriptor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
public class ReflectTest {
/**
* @param args
*/
public static void main(String[] args) throws Exception {
Class clazz = Class.forName("TaskProvidePropsList");//这里的类名是全名。。有包的话要加上包名
Object obj = clazz.newInstance();
Field[] fields = clazz.getDeclaredFields();
//写数据
for(Field f : fields) {
PropertyDescriptor pd = new PropertyDescriptor(f.getName(), clazz);
Method wM = pd.getWriteMethod();//获得写方法
wM.invoke(obj, 2);//因为知道是int类型的属性,所以传个int过去就是了。。实际情况中需要判断下他的参数类型
}
//读数据
for(Field f : fields) {
PropertyDescriptor pd = new PropertyDescriptor(f.getName(), clazz);
Method rM = pd.getReadMethod();//获得读方法
Integer num = (Integer) rM.invoke(obj);//因为知道是int类型的属性,所以转换成integer就是了。。也可以不转换直接打印
System.out.println(num);
}
}
}
对我有帮助
9
回答时间:2010-8-6 21:16 | 我来评论
向TA求助
回答者: Jseven_jy | 九级采纳率:33% 名人
擅长领域: JAVA相关 程序设计
参加的活动: 暂时没有参加的活动
提问者对于答案的评价:
谢谢
其他回答 共2条
package zhidao.baidu.com;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
public class TaskProvidePropsList {
private int provide_id;
private int props_sign;
public int getProvide_id() {
return provide_id;
}
public void setProvide_id(int provide_id) {
this.provide_id = provide_id;
}
public int getProps_sign() {
return props_sign;
}
public void setProps_sign(int props_sign) {
this.props_sign = props_sign;
}
public static void main()throws Exception{
Class<?> c=Class.forName("zhidao.baidu.com");
Field f[]=c.getDeclaredFields();
String[] fieldName=new String[f.length];
String[] fieldType=new String[f.length];
//取得属性名及取类型
for(int i=0;i<f.length;i++){
fieldName[i]=f[i].getName();
fieldType[i]=f[i].getType().getName();
}
}
//调用set方法,输入类名(String)属性名,属性值,及属性类型
public static void setter(String className,String att,Object value,Class<?> type){
try{
Object obj=Class.forName(className).newInstance();
Method met=obj.getClass().getMethod("set"+initStr(att), type);
met.invoke(obj, value);
}catch(Exception e){
e.printStackTrace();
}
}
//调用get方法,输入类名,属性名。
public static void getter(String className,String att){
try{
Object obj=Class.forName(className).newInstance();
Method met=obj.getClass().getMethod("get"+initStr(att));
System.out.println(met.invoke(obj));
}catch(Exception e){
e.printStackTrace();
}
}
//对属性名进行处理,以便获得得get,set方法
public static String initStr(String old){
return old.substring(0, 1).toUpperCase()+old.substring(1);
}
}
回答者: 553563608 | 三级 | 2010-8-6 20:47
import java.lang.reflect.*;
public class Test{
public static void main(String args[]) throws Exception{
Class c=Class.forName("TaskProvidePropsList");
Object obj=c.newInstance();
//set
Method msetid=c.getMethod("setProvide_id",Integer.TYPE);
msetid.invoke(obj,new Integer(100));
Method msetsign=c.getMethod("setProps_sign",Integer.TYPE);
msetsign.invoke(obj,new Integer(100));
//get
Method mgetsign=c.getMethod("getProps_sign");
Integer sign=(Integer)mgetsign.invoke(obj);
Method mgetid=c.getMethod("getProvide_id");
Integer id=(Integer)mgetid.invoke(obj);
//打印
System.out.println("Props_sign:"+sign.intValue());
System.out.println("Provide_id:"+id.intValue());
}
}
遍历所有方法的代码:
Class c=Class.forName("TaskProvidePropsList");
Object obj=c.newInstance();
Method all[]=c.getMethods();
boolean isset[]=new boolean[all.length];
int i=0;
//按顺序打印
for(i=0;i<all.length;i++){
String name=all[i].getName();
isset[i]=name.startsWith("set");
if(isset[i]) all[i].invoke(obj,new Integer(100));
}
for(i=0;i<all.length;i++){
if(!isset[i]){
Integer val=all[i].invoke(obj);
String name=(all[i].getName()).substring(3);
System.out.println(name+":"+val.intValue());
}
}
发表评论
-
Spring官网改版后下载
2014-04-11 10:39 704Spring官网改版后找了好久都没有找到直接下载Jar包的链接 ... -
Java 系统架构设计
2014-03-31 21:18 1436首先分为网关和引擎等多个部分: 第一部分:网关 1、主要负责转 ... -
Java 提高系统性能
2014-03-03 22:22 2567首先是从三方面来提高的,应用层面,服务器端层面,数据库层面。 ... -
2013年11月份艺龙旅行网面试题
2013-11-22 23:39 12161.给你两个字符串s1="abc",s2= ... -
国猪555555555
2013-11-22 00:16 990国足第一招:场地太差,不适应。 国足第二招:场地太好,不适应。 ... -
自己认为的一些技术点
2013-08-14 00:12 11501.rest风格的编程。 2.memcached的命中率低的问 ... -
HttpClient
2013-01-14 23:57 1001package org.abin.lee.test.http; ... -
JAVA单例模式读取properties配置文件
2012-12-16 01:12 2608前段时间出差去做一个数据接口的项目,有很多参数需要从工程中的配 ... -
Java 反射调用方法
2012-10-22 23:52 940package lc.abin.lee.reflect; i ... -
Java Https单向,双向验证
2012-09-23 22:47 2953https一般来说有单项SSL和双向SSL连接之分。 单项 ... -
Java中的transient,volatile和strictfp关键字
2012-09-12 18:00 785http://www.iteye.com/topic/5295 ... -
Server JBoss v5.0 at localhost was unable to start within 50 seconds.
2012-09-05 11:35 1835[标题]:[转]JBoss was unable to sta ... -
HttpUrlConnection 开发例子
2012-03-25 16:23 3303/*** * * 发送HTTP请求 * @ ... -
Java Enum类型定义的方法
2012-03-12 12:34 2292//枚举接口 package com.abin.info.s ... -
Rational Rose 2003 下载及破解方法
2012-03-06 12:49 1337FROM:http://blog.csdn.net/fengl ... -
使用Spring进行面向切面(AOP)编程
2012-02-22 10:35 22931.aop理论知识 横切性关注点:对哪些方法拦截,拦截后怎么处 ... -
BASE64、MD5、SHA、HMAC几种加密算法
2012-02-21 12:53 8755BASE64编码算法不算是真正的加密算法。 MD5、 ... -
文本文件和二进制文件区别及java中字节流和字符流归纳
2012-02-17 15:48 2945首先在物理上文本文件和二进制文件并没有区别,都是以二进制01的 ... -
Java 字节流转化为文件
2012-02-17 15:46 5639已知:byte[] bytes=new FileToBytes ... -
Java核心之Java内存分配原理
2012-02-17 13:40 922JAVA内存分配与管理是Java的核心技术之一,之前我们曾介绍 ...
相关推荐
本程序实现Invoke反射,内置说明txt文档,可以参考
Java反射 调用空参方法 调用Object类型参数的方法 调用基本类型参数的方法 调用基本类型数组参数的方法 调用String数组参数的方法 调用Object数组参数的方法 调用私有方法
java反射机制描述及Method.invoke解释
主要介绍了Java反射机制及Method.invoke详解,本文讲解了JAVA反射机制、得到某个对象的属性、得到某个类的静态属性、执行某对象的方法、执行某个类的静态方法等内容,需要的朋友可以参考下
Method,invoke,getMethod等反射私有方法和私有属性
Chp15 反射Key Point ●Class 对象及其基本操作●Method 对象以及invoke 方法●标注练习 1. (类对象)要获得类对象,有三种不同的方式,分别为_____________________、___________________、_____________________...
Java反射反射机制,通过反射,在不修改源代码的情况下实现对类的操作。JAVA反射机制是在运行状态中...这种动态获取信息以及动态调用对象方法(**方法名.invoke(类对象),类似于p.eat()**)的功能称为java语言的反射机制。
java反射机制详解及Method.invoke解释.pdf
在使用反射可以得到类模板class对象,那么得到类模板的class对象后,如何调用某个已知的且需要的方法呢?答案是使用method类的invoke方法,那么实现的代码如下,结合jdk的api和该代码便可以知道原理 package ...
java reflect Method getDeclaredMethod invoke getConstructor
Java提供了一套机制来动态执行方法和构造方法,以及数组操作等,这套机制就叫——反射。反射机制是如今很多流行框架的实现基础,其中包括Spring、Hibernate等。原理性的问题不是本文的重点,接下来让我们在实例中...
java动态代理 public class HireProxy implements InvocationHandler { //被代理的真实角色 private Object obj; public HireProxy(Object obj) { super(); this.obj = obj; } //第二个参数method,被...
这样你就可以使用 Constructor 创建新的对象,用 get() 和 set() 方法读取和修改与 Field 对象关联的字段,用invoke() 方法调用与 Method 对象关联的方法。 另外,还可以调用 getFields() getMethods
java vm很清楚你编写的class的结构,所以j2sdk提供了反射机制来动态的调用class的方法,举个例子,我们在调用对象的方法,常用的可能是obj.invokedmethod,而用发射机制,可以写成Invoker.invoke("className",...
DumpMethods.java 使用反射机制来获取类中的方法 getClassName.java 利用反射机制获取类的名字 invokeConstructor.java 利用反射机制调用构造器 invokeMethod.java 利用反射机制调用成员方法 listConstructors....
jOOR 在java原生的反射基础上进行了简单的封装,使得反射使用方便不少! 举个简单的列子,供大家参考。 java 原生反射写法: try { Method m1 = department.getClass().getMethod("getEmployees"); Employee ...
主要介绍了InvocationHandler中invoke()方法的调用问题分析,具有一定参考价值,需要的朋友可以了解下。
1. 获取Class类对象的方法 /* * Class Class.forName(String packageNameAndClassName); * Class 类的静态成员方法通过完整的包名.类名获取对应的.class文件的class对象 * 同时也可以作为.class文件加载的方式 *...
整理的一个java反射的使用框架 可以适用各种上层class的调用包括其method的调用 内部类及接口那些没写 你可以自己基于我这个框架的方式再结合资料自己编写 使用非常简单 效果非常强大
通配符定义的变量主要用作引用,调用与参数化无关的方法,如果要调用与参数化相关的方法,那么必须在使用?通配符引用之前调用,否则就与java 5提供泛型的目的背道而驰了。 b..向下限定通配符: 正确:Vector...