package com.cn.component;
import java.lang.reflect.Method;
/**
* 反射 之 调用 类中的setter、getter方法
* @author Administrator
*
*/
public class InvokeSetGetDemo {
/**
* @param args
*/
public static void main(String[] args) {
Class<?> c = null;//声明class对象
Object obj = null;//声明一个对象
try {
c = Class.forName("com.cn.model.Person");//实例化class对象
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
try {
obj = c.newInstance();// 实例化操作对象
} catch (InstantiationException e) {//实例化异常
e.printStackTrace();
} catch (IllegalAccessException e) {//非法访问异常
e.printStackTrace();
}
setter(obj,"name","小李子",String.class);//调用setter
setter(obj,"age",20,int.class);//调用setter
System.out.print("姓名:");
getter(obj,"name");//调用getter方法
System.out.print("年龄:");
getter(obj,"age");//调用getter方法
}
/**
*
* @param obj
* 操作的对象
* @param attr
* 操作的属性值
* @param value
* 设置的值
* @param type
* 参数的类型
*/
public static void setter(Object obj, String attr, Object value,
Class<?> type) {
try {
// 第一个参数表示方法名称,setAge、setName,第二个参数表示类型,如int.class,String.class
Method method = obj.getClass().getMethod("set" + initStr(attr),
type);
method.invoke(obj, value);// 调用方法
} catch (Exception e) {
e.printStackTrace();
}
}
public static void getter(Object obj, String attr) {// 调用getter方法
try {
Method method = obj.getClass().getMethod("get" + initStr(attr));// 此方法不需要参数,如:getName(),getAge()
System.out.println(method.invoke(obj));// 接收方法的返回值,输出结果
} catch (Exception e) {
e.printStackTrace();
}
}
public static String initStr(String old) {// 单词首字母大写
String str = old.substring(0, 1).toUpperCase() + old.substring(1);
return str;
}
}
//输出:
//姓名:小李子
//年龄:20
package com.cn.model;
import com.cn.service.China;
public class Person implements China{
private String name;
private int age;
public Person(){
}
public Person(String name){
this.name=name;
}
public Person(String name,int age){
this(name);//调用有一个参数的构造函数
this.setAge(age);
}
public void sayChina() {
// TODO Auto-generated method stub
System.out.println("作者:"+AUTHOR+" ,国籍: "+NATIONAL);
}
public String sayHello(String name, int age) {
// TODO Auto-generated method stub
return name+",你好!我今年"+age+"岁了";
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
package com.cn.service;
/**
* 接口对象
* @author Administrator
*
*/
public interface China {
public static final String NATIONAL="China";//常量
public static final String AUTHOR="老李";//接口中的常量
public void sayChina();//方法,实现接口必须重写
public String sayHello(String name,int age);//方法,实现接口必须重写
}
分享到:
相关推荐
提供调用getter/setter方法, 访问私有变量, 调用私有方法, 获取泛型类型Class,java * 反射工具类. 提供调用getter/setter方法, 访问私有变量, 调用私有方法, 获取泛型类型Class,java * 反射工具类. 提供调用getter/...
提供调用getter/setter方法, 访问私有变量, 调用私有方法, 获取泛型类型Class, 被AOP过的真实类等工具函数.反射工具类. 提供调用getter/setter方法, 访问私有变量, 调用私有方法, 获取泛型类型Class, 被AOP过的真实...
在本文中,我们将介绍如何使用Java反射通过Getter方法获取对象VO的属性值的过程解析。 Getter方法是Java Beans规范中的一种方法,用于获取对象的属性值。通过Getter方法,可以获取对象的属性值,并将其存储在Map中...
在给定的例子中,有一个`Commodity_Parent`类,它包含私有的`commodity_name`和`commodity_price`属性,以及对应的getter和setter方法。这个类被`Commodity_Child`类继承,后者增加了一个私有的`Commodity_number`...
Java反射机制是Java编程语言中的一个强大特性,它允许程序在运行时检查和操作类、接口、字段和方法的信息。这个特性使得Java具备了高度的灵活性,能够在运行时动态地发现和使用类的属性和方法,即使这些信息在编译时...
`Student`类定义了学生的姓名属性以及相关的getter和setter方法。值得注意的是,`Study`方法用于模拟学生学习的行为,当通过反射调用时,会在控制台输出一条信息:“this person is a student”。 #### 五、配置...
- 数据库持久化框架:例如Hibernate,通过反射调用对象的getter和setter方法来读写数据库记录。 - AOP(面向切面编程):动态代理实现切面的插入。 - 运行时检查类结构:例如在单元测试中验证类的属性和方法。 总结...
例如,通过反射调用对象的getter方法获取属性值,然后拼接成SQL的WHERE子句;或者,通过setter方法设置属性,然后执行插入或更新操作。 总结起来,结合反射技术和XML,通用实体类可以有效地减少代码重复,提高开发...
`invoke()`方法的第一个参数是调用该方法的对象,第二个参数是传递给方法的参数(在这个例子中,getter方法不需要参数,所以我们传递了一个空的`Object[]`)。 这样,我们就可以根据数据库中的字段顺序,动态地从`...
// 调用setter方法设置name setNameMethod.invoke(userObj, "张三"); // 获取age属性的setter方法 Method setAgeMethod = userClass.getMethod("setAge", int.class); // 调用setter方法设置age setAgeMethod...
5. **遵循框架规范**:对于Struts2等框架,遵守其特定规则,如不直接在Action方法中使用参数,而是通过类成员变量及相应的getter/setter方法进行操作。 6. **配置审查**:检查框架配置文件,如`struts.xml`,确保...
- 数据库操作框架:如Hibernate,通过反射调用getter/setter方法实现对象与数据库记录的映射。 - 插件系统:允许在不修改源代码的情况下扩展或替换已有功能。 - 测试工具:JUnit等测试框架利用反射访问私有方法...
对于每个字段,我们将其设为可访问,找到目标对象对应名称的字段,然后检查类型是否兼容,最后通过反射调用`set`方法进行赋值。 通过结合构造函数和反射,我们可以实现类属性的深度赋值,即使属性是私有的或需要...
5. **调用setter方法**:通过反射调用setter方法,将转换后的值赋给JavaBean的相应属性。 #### 示例代码解析 在提供的代码片段中,可以看到`ParameterUtil`类的核心方法`setFormBean()`实现了上述逻辑。该方法接受...
例如,它利用反射加载和保存数据库实体,调用getter和setter方法来映射属性,以及执行HQL(Hibernate查询语言)中的动态方法调用。 总结来说,Java 1.5的反射机制极大地增强了Java的灵活性和动态性,使得开发者能够...
在这个简单的`Admin`类中,我们定义了一个私有字符串字段`id`以及对应的getter和setter方法。`getId()`方法在打印`id`值之前会先输出这个值。 #### 使用反射调用方法 ```java public static void main(String[] ...
在`main`方法中,`Util`类被用来创建一个`Son1`的实例,并通过反射调用`setName`方法设置`name`字段为"wang da sha",然后打印出这个名字,证实了反射机制的成功应用。 反射机制在Java开发中有多种用途,例如: - ...
从提供的代码片段来看,这段代码定义了一个名为`ClassInfoUtils`的工具类,主要功能是支持给定类的“getter”和“setter”方法映射到一个`ClassInfo`实例中。这个类包含了一些方法,如`putSetterMethod`和`...
4. 遍历这些字段,并使用相应的getter和setter方法将原始对象的属性复制到新对象中。 通过这两个示例,我们可以看到Java反射机制的强大之处,它允许开发者在运行时灵活地操作类和对象,这对于构建高度可扩展和可...
反射在JavaBean中扮演重要角色,允许工具通过属性的getter和setter方法动态地操作组件。例如,通过反射可以获取JavaBean的所有属性,然后动态地设置或获取这些属性的值。 6. 应用场景 反射机制在许多场景下都非常...