Java反射获取基本类型、包装类型、String对象类型的字段值

简介: package com.zkn.reflect.classinfo;import java.lang.reflect.Field;import java.lang.reflect.Type;import com.zkn.reflect.scope.Company;import com.zkn.reflect.scope.People;/** * <p>Titl
package com.zkn.reflect.classinfo;

import java.lang.reflect.Field;
import java.lang.reflect.Type;

import com.zkn.reflect.scope.Company;
import com.zkn.reflect.scope.People;

/**
 * <p>Title: </p>
 *
 * <p>Description: </p>
 *
 * 
 * @since:2015-5-25 下午07:02:09
 * 
 */
public class ClassInfo {

 public static void getParameters(Class<?> clazz) {

  Field[] fields = clazz.getDeclaredFields();
  for(Field f : fields){
   System.out.println(f.getName());
  }
 }
 
 public static void getFieldsValue(Object obj) {
  Field[] fields = obj.getClass().getDeclaredFields();
  /**
   * 基本类型、包装类型、String类型
   */
  String[] types = {"java.lang.Integer",
        "java.lang.Double",
        "java.lang.Float",
        "java.lang.Long",
        "java.lang.Short",
        "java.lang.Byte",
        "java.lang.Boolean",
        "java.lang.Character",
        "java.lang.String",
        "int","double","long","short","byte","boolean","char","float"};
  for(Field f : fields){
   f.setAccessible(true);
   try {
    for(String str : types) {
     if(f.getType().getName().equals(str))
      System.out.println("字段:"+f.getName()+" 类型为:"+f.getType().getName()+" 值为:"+ f.get(obj));
    }
   } catch (IllegalArgumentException e) {
    e.printStackTrace();
   } catch (IllegalAccessException e) {
    e.printStackTrace();
   }
  }
 }
 
 public static void main(String[] args) throws Exception {
  People people = new People();
  people.setAge(12);
  people.setSex("男");
  Company company = new Company();
  company.setAddress("北京");
  company.setName("科技股份有限公司");
  people.setCompany(company);
  people.setMoney(1000.00);
  getFieldsValue(people);
 }
 
}


package com.zkn.reflect.scope;
/**
 * <p>Title: </p>
 *
 * <p>Description: </p>
 *
 * 
 * @since:2015-5-25 下午07:04:22
 * 
 */
public class People {

 /**
  * 姓名
  */
 private String name;
 /**
  * 性别
  */
 private String sex;
 /**
  * 年龄
  */
 private int age;
 /**
  * 地址
  */
 private String address;
 /**
  * 学校
  */
 public String school;
 /**
  * 公司
  */
 private Company company;
 /**
  * 金额
  */
 private Double money;
 
 public String getName() {
  return name;
 }
 public void setName(String name) {
  this.name = name;
 }
 public String getSex() {
  return sex;
 }
 public void setSex(String sex) {
  this.sex = sex;
 }
 public String getAddress() {
  return address;
 }
 public void setAddress(String address) {
  this.address = address;
 }
 public String getSchool() {
  return school;
 }
 public void setSchool(String school) {
  this.school = school;
 }
 public Company getCompany() {
  return company;
 }
 public void setCompany(Company company) {
  this.company = company;
 }
 public int getAge() {
  return age;
 }
 public void setAge(int age) {
  this.age = age;
 }
 public Double getMoney() {
  return money;
 }
 public void setMoney(Double money) {
  this.money = money;
 }
 
}


package com.zkn.reflect.scope;
/**
 * <p>Title: </p>
 *
 * <p>Description: </p>
 *
 * 
 * @since:2015-5-28 下午12:52:55
 * 
 */
public class Company {

 /**
  * 公司名称
  */
 private String name;
 /**
  * 公司地址
  */
 private String address;
 public String getName() {
  return name;
 }
 public void setName(String name) {
  this.name = name;
 }
 public String getAddress() {
  return address;
 }
 public void setAddress(String address) {
  this.address = address;
 }
 
 @Override
 public String toString() {
  return "Company [name=" + name + ", address=" + address + "]";
 }
 
}


输出结果:

字段:name 类型为:java.lang.String 值为:null
字段:sex 类型为:java.lang.String 值为:男
字段:age 类型为:int 值为:12
字段:address 类型为:java.lang.String 值为:null
字段:school 类型为:java.lang.String 值为:null
字段:money 类型为:java.lang.Double 值为:1000.0

 

 


相关文章
|
29天前
|
Java 测试技术 开发者
Java零基础-indexOf(String str)详解!
【10月更文挑战第14天】Java零基础教学篇,手把手实践教学!
111 65
|
30天前
|
Java 测试技术 开发者
Java零基础-indexOf(String str)详解!
【10月更文挑战第13天】Java零基础教学篇,手把手实践教学!
41 1
|
1月前
|
安全 Java 测试技术
Java零基础-StringBuffer 类详解
【10月更文挑战第9天】Java零基础教学篇,手把手实践教学!
28 2
|
1月前
|
数据可视化 Java
让星星月亮告诉你,通过反射创建类的实例对象,并通过Unsafe theUnsafe来修改实例对象的私有的String类型的成员属性的值
本文介绍了如何使用 Unsafe 类通过反射机制修改对象的私有属性值。主要包括: 1. 获取 Unsafe 的 theUnsafe 属性:通过反射获取 Unsafe类的私有静态属性theUnsafe,并放开其访问权限,以便后续操作 2. 利用反射创建 User 类的实例对象:通过反射创建User类的实例对象,并定义预期值 3. 利用反射获取实例对象的name属性并修改:通过反射获取 User类实例对象的私有属性name,使用 Unsafe`的compareAndSwapObject方法直接在内存地址上修改属性值 核心代码展示了详细的步骤和逻辑,确保了对私有属性的修改不受 JVM 访问权限的限制
52 4
|
1月前
|
IDE Java 开发工具
Java“未封闭的 String 表达式”怎么解决
要解决Java中的“未封闭的 String 表示”问题,需检查并修正字符串字面量,确保每个字符串被正确地用双引号括起来。若字符串跨越多行,可使用字符串连接操作符(+)或引入文本块(JDK 13 及以上版本)。这能帮助避免语法错误,并使代码更整洁易读。
|
1月前
|
Java 编译器
【一步一步了解Java系列】:探索Java基本类型转换的秘密
【一步一步了解Java系列】:探索Java基本类型转换的秘密
37 3
|
1月前
|
存储 安全 Java
【一步一步了解Java系列】:认识String类
【一步一步了解Java系列】:认识String类
25 2
|
1月前
|
Java 编译器 C语言
【一步一步了解Java系列】:探索Java基本类型与C语言的区别
【一步一步了解Java系列】:探索Java基本类型与C语言的区别
45 2
|
1月前
|
存储 分布式计算 NoSQL
大数据-40 Redis 类型集合 string list set sorted hash 指令列表 执行结果 附截图
大数据-40 Redis 类型集合 string list set sorted hash 指令列表 执行结果 附截图
27 3
|
7天前
|
Java 开发者
Java多线程编程中的常见误区与最佳实践####
本文深入剖析了Java多线程编程中开发者常遇到的几个典型误区,如对`start()`与`run()`方法的混淆使用、忽视线程安全问题、错误处理未同步的共享变量等,并针对这些问题提出了具体的解决方案和最佳实践。通过实例代码对比,直观展示了正确与错误的实现方式,旨在帮助读者构建更加健壮、高效的多线程应用程序。 ####
下一篇
无影云桌面