`
bo_hai
  • 浏览: 564255 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

java.lang.reflect.Method 中getWriteMethod() 的使用方法

阅读更多

使用getWriteMethod() 为类的属性赋值。

一、普通类如下:

public class MyBean {
	private String id = null;
	private String userName = null;
	
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public String getUserName() {
		return userName;
	}
	public void setUserName(String userName) {
		this.userName = userName;
	}
	
}

 

二、测试类如下:

import java.beans.BeanInfo;
import java.beans.IntrospectionException;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.Map;

public class MethodWrite {
	
	private MyBean beanObj = null;
	
	private BeanInfo bBeanObjInfo = null;
	
	public void TestMethodInvoke(){
		Map userMap = new HashMap();
		userMap.put("id", "1001");
		userMap.put("userName", "isoftstone");
		
		try{
			//实例化一个Bean
			beanObj = new MyBean();
			//依据Bean产生一个相关的BeanInfo类
			bBeanObjInfo = Introspector.getBeanInfo(beanObj.getClass());
			
			PropertyDescriptor[] propertyDesc = bBeanObjInfo.getPropertyDescriptors();
			for (int i = 0; i < propertyDesc.length; i++) {
				if (propertyDesc[i].getName().compareToIgnoreCase("class")==0) continue;
				//System.out.print(propertyDesc[i].getName());
				String strValue = (String)userMap.get((String)propertyDesc[i].getName());
				//System.out.println(strValue);
				
				if(strValue != null){
					Object[] oParam = new Object[]{};
					Method mr = propertyDesc[i].getWriteMethod();
					if( mr != null){
						oParam = new String[]{(strValue)};
						try{
							//注意这里的参数。
							mr.invoke(beanObj, oParam);
						}catch(IllegalArgumentException iea){
							System.out.println("参数错误。");
							iea.printStackTrace();
						}
						
					}
				}
				
			}
			
			System.out.println(beanObj.getId());
			System.out.println(beanObj.getUserName());
			
		}catch(IntrospectionException e){
			System.out.println("Java Bean 内省异常。");
		}catch(IllegalAccessException ia){
			System.out.println("参数异常。");
			ia.printStackTrace();
		}catch(InvocationTargetException ie){
			System.out.println("invode异常。");
			ie.printStackTrace();
		}
		
	}

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		new MethodWrite().TestMethodInvoke();
	}

}

 

分享到:
评论
5 楼 bo_hai 2011-05-26  
a8723832 写道
你好。我想问你一个问题。。javabean中有一个属性是INT类型的。但是我通过表单提交过去的数据他一定是string类型的,这样就导致了异常经常出现说“参数错误”,不知道仁兄有什么好的解决办法。。但是不能把方法写死啊。


最近我很忙呀,可能没有时间思考你的问题!!sorry!!
4 楼 a8723832 2011-05-16  
a8723832 写道
你好。我想问你一个问题。。javabean中有一个属性是INT类型的。但是我通过表单提交过去的数据,通过getWriteMethod他却是string类型的,然后执行  mr.invoke(beanObj, oParam);,这样就导致了异常经常出现说“参数错误”因为我原本set写入方法是int类型的。但是我页面上传过来的oParam是属于string类型的。,不知道仁兄有什么好的解决办法。。但是不能把方法写死啊。,因为我set写入方法肯定是要对应很多类型的。。有没有什么灵活的办法。。。

3 楼 a8723832 2011-05-16  
你好。我想问你一个问题。。javabean中有一个属性是INT类型的。但是我通过表单提交过去的数据他一定是string类型的,这样就导致了异常经常出现说“参数错误”,不知道仁兄有什么好的解决办法。。但是不能把方法写死啊。
2 楼 bo_hai 2011-01-25  
这种方法可以用于将页面中表单提交的数据,赋给一个数据实体类。在我们的系统中用到了。
1 楼 bo_hai 2011-01-25  
程序的执行结果:
1001
isoftstone

相关推荐

    scrcpy投屏 AssertionError: java.lang.reflect.InvocationTargetExcep

    标题中的问题“scrcpy投屏 AssertionError: java.lang.reflect.InvocationTargetException”是用户在尝试使用Scrcpy时遇到的一个常见错误。这个错误通常意味着在执行某个方法时,Java运行时环境遇到了未预期的情况。...

    解决axis2-CodegenWizardPluginBUG- java.lang.reflect.InvocationTargetException

    `InvocationTargetException`通常作为Java标准库中的`java.lang.reflect.Method.invoke()`方法的异常包装器。当目标方法抛出异常时,`invoke()`会捕获这个异常并封装为`InvocationTargetException`,然后将其抛出。...

    java.lang.reflect.Proxy 学习资料 讲解 例子 源码

    java.lang.reflect.Proxy 学习资料 讲解 例子 源码 java.lang.reflect.Proxy 学习资料 讲解 例子 源码 java.lang.reflect.Proxy 学习资料 讲解 例子 源码

    Java.lang.reflect 包下常用的类及方法简介

    在Java编程语言中,`java.lang.reflect`包是核心库的一部分,它提供了运行时访问类、接口、字段和方法的能力。这个包对于理解和操作对象的动态特性至关重要,尤其是在实现反射机制时。反射允许我们在程序运行期间...

    WebLogic错误 java.lang.AssertionError: Registered more than one

    在WebLogic Server 9.2至10.0版本中,用户可能会遇到一个特定的错误,即“java.lang.AssertionError: Registered more than one instance with the same objectName”。这个错误主要表现为服务器启动后,在Admin ...

    MyEclipse axis2 wsdl java.lang.reflect.invocationtargetexception

    MyEclipse axis2 wsdl java.lang.reflect.invocationtargetexception code gen 大家要注意一定要仔细,这个问题基本上缺少包引起的,而且一定要clean 如果需要axis2插件 以及这个plugins中的包在我的其他资源里面有

    Java reflect 机制详解

    免费共享,很详细的介绍了反射机制的原理,适合追根究底的java学习者

    commons-lang3-3.1jar:org.apache.commons.lang3.StringUtils等.

    `org.apache.commons.lang3.reflect.FieldUtils`类则是关于反射操作的工具类,它提供了一些安全且方便的方法来访问和修改对象的字段。这些方法包括但不限于: 1. `getField()`:安全地获取类或对象的字段,即使该...

    jaxen.jar和dom4j.jar

    at java.lang.reflect.Method.invoke(Unknown Source) at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44) at org.junit.internal.runners.model.ReflectiveCallable.run...

    java.lang.IllegalArgumentException:Input == null的异常处理

    java.lang.ExceptionInInitializerError Caused by: java.lang.IllegalArgumentException: input == null! at javax.imageio.ImageIO.read(ImageIO.java:1388) at com.pleanwar.fiying.FlyingObject.loadImage...

    java 请求的方法不存在(NoSuchMethodException)

    3. **Java动态代理**:基于`java.lang.reflect.Proxy`和`java.lang.reflect.InvocationHandler`,实现对目标对象的代理,用于拦截方法调用。 综上所述,`NoSuchMethodException`是Java编程中需要关注的一个重要异常...

    BEWINDOWEB#bewindoweb.github.io#00078-编写basedao的时候报错:java.lang.C

    编写basedao的时候报错:java.lang.Class cannot be cast to java.lang.reflect.Parameterized

    server frame base on c.rar

    java.lang.NullPointerException ... at java.lang.reflect.Method.invoke(Method.java:498) at org.apache.tomcat.websocket.pojo.PojoMessageHandlerWholeBase.onMessage(PojoMessageHandlerWholeBase.java:80)

    aop面向切面需要的jar包

    Caused by: java.lang.ClassNotFoundException: org.aspectj.weaver.reflect.ReflectionWorld$ReflectionWorldException at java.net.URLClassLoader$1.run(URLClassLoader.java:200) at java.security.Access...

    JAVA反射实现和实现机制

    4. **`java.lang.reflect.Method`**:表示类的方法。 5. **`java.lang.reflect.Modifier`**:提供对成员的修饰符的访问。 ##### 基本使用方法 1. **获取成员方法信息**: - `Method[] getMethods()`:获取公开的...

    java 反射 报错 no such method exception

    `NoSuchMethodException`属于`java.lang.reflect`包,当反射API试图查找一个指定签名的方法而该方法不存在于目标类中时,会抛出此异常。这意味着在编译时存在该方法,但在运行时却由于某种原因(如类加载问题、方法...

    什么是java中的反射机制(reflect).docx

    Class 类代表了 Java 中的一个类,而 java.lang.reflect 包提供了许多反射类,例如 Constructor、Method、Field 等。 Constructor 类代表了某个类中的一个构造方法。例如,我们可以使用 Class.forName("java.lang....

    java反射(reflect)

    1. 动态代理:使用`java.lang.reflect.Proxy`和`java.lang.reflect.InvocationHandler`可以创建动态代理对象,实现AOP(面向切面编程)。 2. 数据库操作框架:如MyBatis,通过反射动态生成SQL语句并执行。 3. XML...

    Android平台与Web服务数据交互时运用Java反射机制解析数据的研究.pdf

    其中最经常使用的是三个类:java.lang.reflect.Field类、java.lang.reflect.Method类和java.lang.reflect.Constructor类。 Java.lang.reflect.Field类提供了有关类或接口的单个域的信息。利用这个类,我们可以得到...

Global site tag (gtag.js) - Google Analytics