方法使用了这俩个包下的 field 和method
import java.lang.reflect.Field;
import java.lang.reflect.Method;
public static void getObjectValue(Object object) throws Exception {
//我们项目的所有实体类都继承BaseDomain (所有实体基类:该类只是串行化一下)
//不需要的自己去掉即可
if (object != null && object instanceof BaseDomain) {//if (object!=null ) ----begin
// 拿到该类
Class<?> clz = object.getClass();
// 获取实体类的所有属性,返回Field数组
Field[] fields = clz.getDeclaredFields();
for (Field field : fields) {// --for() begin
System.out.println(field.getGenericType());//打印该类的所有属性类型
// 如果类型是String
if (field.getGenericType().toString().equals(
"class java.lang.String")) { // 如果type是类类型,则前面包含"class ",后面跟类名
// 拿到该属性的gettet方法
Method m = (Method) object.getClass().getMethod(
"get" + getMethodName(field.getName()));
String val = (String) m.invoke(object);// 调用getter方法获取属性值
if (val != null) {
System.out.println("String type:" + val);
}
}
// 如果类型是Integer
if (field.getGenericType().toString().equals(
"class java.lang.Integer")) {
Method m = (Method) object.getClass().getMethod(
"get" + getMethodName(field.getName()));
Integer val = (Integer) m.invoke(object);
if (val != null) {
System.out.println("Integer type:" + val);
}
}
// 如果类型是Double
if (field.getGenericType().toString().equals(
"class java.lang.Double")) {
Method m = (Method) object.getClass().getMethod(
"get" + getMethodName(field.getName()));
Double val = (Double) m.invoke(object);
if (val != null) {
System.out.println("Double type:" + val);
}
}
// 如果类型是Boolean 是封装类
if (field.getGenericType().toString().equals(
"class java.lang.Boolean")) {
Method m = (Method) object.getClass().getMethod(
field.getName());
Boolean val = (Boolean) m.invoke(object);
if (val != null) {
System.out.println("Boolean type:" + val);
}
}
// 如果类型是boolean 基本数据类型不一样 这里有点说名如果定义名是 isXXX的 那就全都是isXXX的
// 反射找不到getter的具体名
if (field.getGenericType().toString().equals("boolean")) {
Method m = (Method) object.getClass().getMethod(
field.getName());
Boolean val = (Boolean) m.invoke(object);
if (val != null) {
System.out.println("boolean type:" + val);
}
}
// 如果类型是Date
if (field.getGenericType().toString().equals(
"class java.util.Date")) {
Method m = (Method) object.getClass().getMethod(
"get" + getMethodName(field.getName()));
Date val = (Date) m.invoke(object);
if (val != null) {
System.out.println("Date type:" + val);
}
}
// 如果类型是Short
if (field.getGenericType().toString().equals(
"class java.lang.Short")) {
Method m = (Method) object.getClass().getMethod(
"get" + getMethodName(field.getName()));
Short val = (Short) m.invoke(object);
if (val != null) {
System.out.println("Short type:" + val);
}
}
// 如果还需要其他的类型请自己做扩展
}//for() --end
}//if (object!=null ) ----end
}
// 把一个字符串的第一个字母大写、效率是最高的、
private static String getMethodName(String fildeName) throws Exception{
byte[] items = fildeName.getBytes();
items[0] = (byte) ((char) items[0] - 'a' + 'A');
return new String(items);
}
分享到:
相关推荐
"Java利用反射获取object的属性和值代码示例" Java中的反射机制可以让我们在程序运行时动态地获取和修改对象的属性和值,这个技术非常有用,尤其是在一些框架和库的实现中。在这篇文章中,我们将通过一个实用的例子...
3. 强大的反射能力:ObjectScript提供了强大的元数据处理功能,允许在运行时检查和修改对象的结构,实现自省和自我修改。 4. 轻量级:ObjectScript设计简洁,易于学习和使用,适合快速开发和原型设计。 三、Object...
类型是变量所具有的属性,决定了变量能存储的数据种类。 - **内置类型**:如 `Integer`, `Real`, `Char`, `String`。 - **用户自定义类型**:可以通过 `type` 关键字创建。 - 示例: ```pascal type TMyType = ...
接下来,代码使用两个嵌套的循环来遍历`auth1`数组中的每个元素,并与`auth`对象的属性名进行比较。如果找到匹配项,就将相应的属性值设置为`true`。这个过程实际上是一种简化的反射操作,通过字符串比较动态地修改...
本文将深入探讨其中的四个关键特性:常量、枚举、for each循环(也称为增强型for循环)以及反射。 首先,让我们来看看“常量”。在JDK 5.0之前,我们通常使用final关键字来创建不可变的变量,但这样的变量并非真正...
面向对象编程(Object-Oriented Programming, OOP)是一种编程范式,它使用“对象”来设计软件和实现程序。对象是数据(属性)和方法(操作这些数据的函数)的封装体。在Java中,一切都是基于对象的。 #### 二、Java...
配置eclispe的编译与运行环境rar在eclispe中配置java模板代码.rar在eclipse中导入已有的工程.rarjava5的静态导入与编译器语法设置.rar可变参数与OverLoad相关...数组与Object的关系及其反射类型.rar数组的反射应用.rar
3. **测试工具:** 在单元测试中,反射可以用于调用私有方法或者访问私有变量,方便进行测试。 4. **代码生成工具:** 如JAXB等工具利用反射生成Java代码。 5. **GUI构建工具:** 如Swing Designer等工具通过反射...
通过`Class`类和`java.lang.reflect`包中的API,我们可以动态地创建对象、访问成员变量和调用方法。 在实现深拷贝时,我们通常会创建一个目标类的空实例,然后遍历原对象的所有字段,如果字段是基本类型,直接赋值...
- `enumerate()`:它将可迭代对象转换为索引-值对的迭代器,方便在for循环中同时处理索引和值。 - `zip()`:它将多个可迭代对象的元素按位置配对,生成一个元组的迭代器。 - `globals()`:返回当前全局命名空间的...
其次,手册深入讲解了Object Pascal的控制结构,如条件语句(如if-then-else)和循环(如for、while和repeat-until)。这些结构是编写逻辑复杂代码的关键,让程序能够根据不同的条件执行不同的操作,或者重复执行...
2. 变量:变量用于存储数据,分为局部变量(方法内定义)、成员变量(类或对象级别)和常量(final修饰)。 3. 方法:方法是执行特定任务的代码块,通过方法可以实现代码的复用。 三、控制结构 1. 条件语句:if、...
- **RunLoop**:用于处理事件循环的机制。 - **接口协议**:Objective-C中的协议类似于其他语言中的接口,定义了一组必须实现的方法签名。 #### Category与动态类型 - **Category**:用于向现有类添加新的行为,而...
例如,通过解析代码字符串到AST,我们可以分析函数定义、变量声明、循环结构等,甚至可以修改AST,然后将其转换回新的代码字符串,实现代码的动态修改。 在"reflection:只是玩弄esprima和JavaScript中的反射"项目中...
Java SE(标准版)是Java开发...以上内容只是Java SE学习的冰山一角,深入学习还需涉及异常处理、IO流、集合框架、多线程、网络编程、反射机制等高级主题。通过不断实践和项目经验积累,才能真正掌握Java SE的精髓。
- 观察者通过`observeValueForKeyPath:ofObject:change:context:`方法接收到属性变化的通知。 - **手动触发KVO**: - 直接调用`willChangeValueForKey:`和`didChangeValueForKey:`方法。 - 注意:直接修改成员...
类加载器 ClassLoader 反射 Stream 流 函数式编程 Lambda 表达式 网络编程-协议 网络编程-端口 网络编程-IP 多线程 IO流-字节流 IO流-字符流 IO流-转换流 File Map HashMap 序列化和反序列化 可变参数 类型通配符 ...
- 综合案例可能涉及利用反射来动态地创建对象并设置其私有成员变量。 ##### 6. 成员方法的反射 - 可以使用`Class`对象的`getDeclaredMethods()`方法获取类的所有成员方法,使用`invoke`方法调用这些方法。 ##### 7...
12. **Object类**:所有Java类都默认继承Object类,其中包含诸如equals()、hashCode()、toString()和clone()等方法。 13. **反射**:反射允许程序在运行时动态地获取类的信息(如字段、方法)并调用,通常用于框架...
【JAVA 概述】 ...这些只是Java面试题库中的一部分,深入学习Java还需要掌握异常处理、集合框架、多线程、IO流、网络编程、反射、设计模式等多个方面。对于面试来说,理解并能应用这些基础知识是非常关键的。