`
ynztpwl
  • 浏览: 59602 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

根据属性名字调用相应的get和set方法

 
阅读更多

package com.ynztpwl.reflect;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import com.ynztpwl.entity.Person;

public class BeanReflectUtil {
/**
* 组装类中某个属性的get方法名称 StringUtil.upperFirst(String str)是自己封装的,将首字母变大写的小方法;
*
* @param c
* 所反射方法所在的类的Class
* @param filedName
* :字段名称
* @return 返回该字段的get方法
* @throws SecurityException
* @throws NoSuchMethodException
*/
public static Method assembleGetMethod(Class<?> c, String filedName)
throws SecurityException, NoSuchMethodException {
String methodName = "get" + BeanReflectUtil.upperFirst(filedName);// 组装方法名
Class<?>[] nullClasses = null;// getter方法所需要的参数类型的Class
return c.getDeclaredMethod(methodName, nullClasses);
}

/**
* 组装类中某个属性的set方法名称
*
* @param c:所反射方法所在的类的Class
* @param filedName
* :字段名称
* @param classArgsType:setter方法所需的参数类型
* @return :返回该字段的setter方法
* @throws SecurityException
* @throws NoSuchMethodException
*/
public static Method assembleSetMethod(Class<?> c, String filedName,
Class<?>[] classArgsType) throws SecurityException,
NoSuchMethodException {
String methodName = "set" + BeanReflectUtil.upperFirst(filedName);
return c.getDeclaredMethod(methodName, classArgsType);
}

/**
* 调用组装类中某个属性的getter方法
*
* @param c:所反射方法所在的类的Class
* @param filedName:字段名称
* @param obj:所反射方法所在的类的实体对象
* @return :getter的返回值
* @throws SecurityException
* @throws NoSuchMethodException
* @throws IllegalArgumentException
* @throws IllegalAccessException
* @throws InvocationTargetException
*/
public static Object invokeGetMethod(Class<?> c, String filedName,
Object obj) throws SecurityException, NoSuchMethodException,
IllegalArgumentException, IllegalAccessException,
InvocationTargetException {
Method method = assembleGetMethod(c, filedName); // 得到属性的getter
Object[] nullObjects = null; // 定义方法所要的参数值
return method.invoke(obj, nullObjects);
}

/**
* 调用组装类中某个属性的setter方法
*
* @param c:所反射方法所在的类的Class
* @param filedName:字段名称
* @param obj:所反射方法所在的类的实体对象
* @param argsType:setter方法所需要的参数类型
* @param argsValue:setter方法所需要的参数值
* @return setter方法的返回值
* @throws SecurityException
* @throws NoSuchMethodException
* @throws IllegalArgumentException
* @throws IllegalAccessException
* @throws InvocationTargetException
*/
public static void invokeSetMethod(Class<?> c, String filedName,
Object obj, Class<?>[] argsType, String[] argsValue)
throws SecurityException, NoSuchMethodException,
IllegalArgumentException, IllegalAccessException,
InvocationTargetException {
Method method = assembleSetMethod(c, filedName, argsType);
method.invoke(obj, argsValue);
}

/**
* 将首字母转化为大写的小方法
*
* @param str
* :需要转化的字符
* @return 转化后的结果
*/
public static String upperFirst(String str) {
String first = str.substring(0, 1);
String last = str.substring(1);
return first.toUpperCase() + last;
}

public static void main(String[] args) throws SecurityException,
IllegalArgumentException, NoSuchMethodException,
IllegalAccessException, InvocationTargetException {
Person person = new Person();
BeanReflectUtil.invokeSetMethod(Person.class, "name", person,
new Class<?>[] { String.class }, new String[] { "李芸" });
System.out.println(BeanReflectUtil.invokeGetMethod(Person.class,
"name", person));
}
}

分享到:
评论

相关推荐

    Java 反射创建get set方法及反射方法的调用

    - 这个方法的作用是根据传入的类`clazz`和属性名`propertyName`,返回一个`PropertyDescriptor`对象。 - 首先尝试获取类中的字段,如果找不到对应的字段,则构建`get`和`set`方法名。 - 使用反射机制查找对应的`...

    VB的GET SET方法批量生成加使用说明书

    在VB(Visual Basic)编程语言中,GET和SET方法是用于访问和修改对象属性的关键机制。这些方法在面向对象编程中扮演着重要角色,确保数据的封装性和安全性。本篇文章将详细讲解GET和SET方法的原理,以及如何在VB中...

    vue计算属性get和set用法示例

    在Vue实例中定义计算属性时,我们通常使用对象形式,其中包含`get`和`set`函数: ```javascript computed: { b: { // getter函数定义了当读取b时的返回值 get: function() { return this.a + 10; }, // 如果...

    java http 接口调用 的get和post传参方法

    java实现调用httpclient接口的类和方法,包括了get和post传参方式,简单易懂

    ActionForm里的get和set方法

    本篇文章将深入探讨ActionForm中的get和set方法及其作用。 1. **ActionForm基础** ActionForm是Struts框架中的一个接口,实现了Servlet API中的HttpServletForm接口。它的主要目的是封装HTTP请求中的参数,将这些...

    vue.js get和set方法使用

    这里的`message`属性就有一个对应的`get`方法,用于获取当前值,和一个`set`方法,用于当尝试修改`message`时触发。 ### `get`方法 `get`方法允许我们获取属性的当前值。在默认情况下,它只是一个简单的返回值的...

    Visual Studio 利用宏直接生成Get和Set属性

    ### Visual Studio 利用宏直接生成Get和Set属性 #### 概述 在软件开发过程中,经常需要为类中的字段创建对应的属性(Property),以便于更安全地访问这些字段。通常,这涉及到手动编写大量的 getter 和 setter 方法...

    get set方法生成工具

    "get set方法生成工具"是为了帮助开发者提高代码编写效率,根据数据表的字段和类型自动生成这些方法的工具。 首先,让我们详细了解get和set方法的作用: 1. **get方法**:get方法用于获取对象的私有属性值。它通常...

    service_java接口远程调用_get、post、带参数远程调用_

    本篇文章将详细讲解如何使用Java实现GET和POST方法的远程接口调用,以及如何处理带有参数的情况。 首先,我们要了解HTTP协议中的GET和POST请求。GET请求通常用于获取资源,其参数包含在URL中;而POST请求常用于提交...

    java反射获取所有属性,获取所有get方法,包括子类父类

    在标题和描述中提到的知识点主要集中在如何通过反射获取类的所有属性和get方法,包括来自子类和父类的。下面将详细介绍这些内容。 1. **获取所有属性**: 在Java中,`java.lang.Class` 类提供了获取类属性的方法。...

    Eclipse右键生成get、set方法.rar

    3. **灵活性**:未来如果需要改变属性的实现,可以通过修改get、set方法,而不会影响到调用它们的其他代码。 四、最佳实践 1. **遵循命名规范**:get方法前缀为"get",后跟属性名(首字母大写)。set方法前缀为...

    java通过HTTP调用接口(Get请求和Post请求)

    java调用HTTP接口(Get请求和Post请求)

    Java通过PropertyDescriptor反射调用set和get方法

    String propertyName)`:这个方法接收一个类`clazz`和属性名称`propertyName`作为参数,它的目的是找到并返回一个`PropertyDescriptor`对象,该对象包含了与给定属性名相对应的`get`和`set`方法。它首先尝试通过`...

    Api接口调用封装,实现POSt,GET等数据请求

    Api接口调用封装,实现POSt,GET等数据请求,Api接口调用封装,实现POSt,GET等数据请求,Api接口调用封装,实现POSt,GET等数据请求,Api接口调用封装,实现POSt,GET等数据请求,Api接口调用封装,实现POSt,GET等数据请求,...

    C# set get用法

    在C#中,`set`和`get`方法是实现封装的关键组成部分,它们主要用于定义属性的行为,即控制类的成员变量的读取和写入方式。 #### 属性的概念 属性在C#中提供了一种灵活的方式来访问类的私有成员。它们看起来像公共...

    java 反射 调用私有方法(有参数私有方法)获取私有属性值

    总结起来,Java反射为我们提供了在运行时操作类、方法和属性的强大工具,包括调用私有方法和获取私有属性值。然而,它也是一把双刃剑,使用时需权衡利弊,确保代码的稳定性和安全性。在处理私有成员时,务必注意对...

    金蝶15.0运行提示GetData对象不支持该属性或方法.docx

    ### 金蝶WISE15.0中GetData对象不支持该属性或方法问题解析与...通过以上分析和提供的解决方案,相信能够帮助用户有效解决金蝶WISE15.0中“GetData对象不支持该属性或方法”的问题,从而提升软件使用的稳定性和效率。

    java中set和get方法的理解

    - **公有方法**: `set`和`get`方法通常是`public`的,这样可以在类外部调用这些方法来访问私有变量。 - **安全性**: 通过`set`方法可以对传入的数据进行校验,确保数据的有效性。 #### 四、具体示例 假设我们有一...

    VC++调用IDispatch接口属性和方法的封装类

    可以在VC++中如下调用IDispatch接口中的属性和方法 //获取属性值 _bstr_t bstrValue=CVB::get(pDispatch,L\"Value\"); //设置属性值 CVB::put(pDispatch,L\"Value\",bstrValue); //调用方法 _bstr_t bstrMessage2...

    flex例程一,关于如何建GET,SET

    在上述例子中,当我们设置或获取`Person`对象的`age`属性时,会自动调用相应的GET或SET方法,这增强了代码的可读性和安全性。 综上所述,GET和SET方法是Flex开发中不可或缺的部分,它们提供了访问和修改对象属性的...

Global site tag (gtag.js) - Google Analytics