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

 

 


相关文章
|
2月前
|
安全 Java 编译器
Java类型提升与类型转换详解
本文详解Java中的类型提升与类型转换机制,涵盖类型提升规则、自动类型转换(隐式转换)和强制类型转换(显式转换)的使用场景与注意事项。内容包括类型提升在表达式运算中的作用、自动转换的类型兼容性规则,以及强制转换可能引发的数据丢失和运行时错误。同时提供多个代码示例,帮助理解byte、short、char等类型在运算时的自动提升行为,以及浮点数和整型之间的转换技巧。最后总结了类型转换的最佳实践,如避免不必要的转换、使用显式转换提高可读性、金融计算中使用BigDecimal等,帮助开发者写出更安全、高效的Java代码。
152 0
|
2月前
|
安全 IDE Java
Java记录类型(Record):简化数据载体类
Java记录类型(Record):简化数据载体类
309 120
|
2月前
|
Java 测试技术
Java浮点类型详解:使用与区别
Java中的浮点类型主要包括float和double,它们在内存占用、精度范围和使用场景上有显著差异。float占用4字节,提供约6-7位有效数字;double占用8字节,提供约15-16位有效数字。float适合内存敏感或精度要求不高的场景,而double精度更高,是Java默认的浮点类型,推荐在大多数情况下使用。两者都存在精度限制,不能用于需要精确计算的金融领域。比较浮点数时应使用误差范围或BigDecimal类。科学计算和工程计算通常使用double,而金融计算应使用BigDecimal。
1040 102
|
6天前
|
存储 算法 安全
Java集合框架:理解类型多样性与限制
总之,在 Java 题材中正确地应对多样化与约束条件要求开发人员深入理解面向对象原则、范式编程思想以及JVM工作机理等核心知识点。通过精心设计与周密规划能够有效地利用 Java 高级特征打造出既健壮又灵活易维护系统软件产品。
35 7
|
10天前
|
编解码 Java 开发者
Java String类的关键方法总结
以上总结了Java `String` 类最常见和重要功能性方法。每种操作都对应着日常编程任务,并且理解每种操作如何影响及处理 `Strings` 对于任何使用 Java 的开发者来说都至关重要。
108 5
|
17天前
|
Java 开发者
Java 函数式编程全解析:静态方法引用、实例方法引用、特定类型方法引用与构造器引用实战教程
本文介绍Java 8函数式编程中的四种方法引用:静态、实例、特定类型及构造器引用,通过简洁示例演示其用法,帮助开发者提升代码可读性与简洁性。
|
2月前
|
安全 算法 Java
Java泛型编程:类型安全与擦除机制
Java泛型详解:从基础语法到类型擦除机制,深入解析通配符与PECS原则,探讨运行时类型获取技巧及最佳实践,助你掌握泛型精髓,写出更安全、灵活的代码。
|
2月前
|
存储 SQL 缓存
Java字符串处理:String、StringBuilder与StringBuffer
本文深入解析Java中String、StringBuilder和StringBuffer的核心区别与使用场景。涵盖字符串不可变性、常量池、intern方法、可变字符串构建器的扩容机制及线程安全实现。通过性能测试对比三者差异,并提供最佳实践与高频面试问题解析,助你掌握Java字符串处理精髓。
|
3月前
|
自然语言处理 Java Apache
在Java中将String字符串转换为算术表达式并计算
具体的实现逻辑需要填写在 `Tokenizer`和 `ExpressionParser`类中,这里只提供了大概的框架。在实际实现时 `Tokenizer`应该提供分词逻辑,把输入的字符串转换成Token序列。而 `ExpressionParser`应当通过递归下降的方式依次解析
247 14

热门文章

最新文章