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>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
时间: 2024-08-04 13:59:14

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

Java反射机制既然可以拿到class对象,知道其中方法为啥不直接使用对象调用方法?

问题描述 Java反射机制既然可以拿到class对象,知道其中方法为啥不直接使用对象调用方法? Java反射机制既然可以拿到class对象,知道其中方法为啥不直接使用对象调用方法?而要invoke来调用对象的方法? 解决方案 知道方法的话当然可以不用invoke.需要invoke的方法大多是在写代码的时候无法确定的 解决方案二: 问题出现的场景是什么? 解决方案三: 面向接口,有些包是不同厂商实现的 反射能通过编译,在运行时才报错 解决方案四: 没有你想的那么简单,你多看看java的设计模式,和

c++ 如果想要改变string对象中字符的值,必须把循环变量定义成引用类型

问题描述 c++ 如果想要改变string对象中字符的值,必须把循环变量定义成引用类型 c++primer上的一句话,不能理解为什么必须要用引用,这和用范围for不用引用有什么区别吗? 试了一下,不用引用输出时字符的值确实没有改变,这是什么原理呢,可以解释一下么? 跪求大神啊 解决方案 不用引用,你循环变量引用的就会是变量的拷贝,就没法修改实际变量 解决方案二: #include #include using std::cout; using std::endl; using std::stri

JAVA 反射获取返回值为MAP类型中的key

问题描述 publicMap<String,Object>getInfo(){Map<String,Object>data=newHashMap<String,Object>();data.put("a",1);returndata;} JAVA反射机制能获取到返回值MAP中的键a嘛?如果不行,有什么其它方法? 解决方案 解决方案二:这要用什么反射map的原生API就可以获取到KEY了解决方案三:Class<YourClass>clazz

Java反射获取方法参数名

问题 在编写一个jws(游戏中心的WEB框架)增强工具的时候,需要得到方法的参数名,而jws本身是可以获取参数名的(不然controller里将请求参数与方法参数绑定的功能也无法实现了). 但使用了jws提供的获取参数名方法时,却出现返回的参数名不正确的问题(只会出现在idea里面): 所以说: 为什么可以获取方法参数? 为什么eclipse和生产环境里不会发生这种问题? 怎样可以正确获取方法的参数名? 问题排查 获取方法参数 众所周知,在java里面,直到java8才可以正式的通过反射获取方法

类型不匹配错误。利用Java反射技术将查询结果封装为对象

问题描述 packagecom.jdbc;importjava.lang.reflect.InvocationTargetException;importjava.lang.reflect.Method;importjava.sql.Connection;importjava.sql.PreparedStatement;importjava.sql.ResultSet;importjava.sql.ResultSetMetaData;importjava.sql.SQLException;pub

Java 反射获取类详细信息的常用方法总结_java

类ReflectionDemo 复制代码 代码如下: package Reflection; @Deprecated public class ReflectionDemo {     private String pri_field;     public String pub_field;     public ReflectionDemo(){}     public ReflectionDemo(String name){}     private ReflectionDemo(Stri

java反射 获取参数为字符串数组的构造函数

问题描述 在研究反射的时候碰到一个问题如下:当我在A类中申明了一个参数为字符串数组(String[] strArray)的构造函数,并且在main方法中用getConstructor(String[].class) 或者 getConstructor(new Class[](String[].class))都无法获得相应的构造函数,然而,当我声明的是参数为整形数组(int[] intArray)的构造函数时,却可以获得相应的构造函数.谁能回答下嘛?十分感谢!代码如下://类Apublic cla

Java反射机制(三):调用对象的私有属性和方法

一. 通过反射调用类中的方法 在正常情况下,得到类的对象后,我们就可以直接调用类中的方法了,如果要想调用的话,则肯定必须清楚地知道要调用的方法是什么,之后通过Class类中的getMethod方法,可得到Method对象. public Method getMethod(String name, Class<?>... parameterTypes) throws NoSuchMethodException, SecurityException 当获取到Method对象后,可以通过该对象来执行

浅谈Java自定义注解和运行时靠反射获取注解_java

java自定义注解 Java注解是附加在代码中的一些元信息,用于一些工具在编译.运行时进行解析和使用,起到说明.配置的功能. 注解不会也不能影响代码的实际逻辑,仅仅起到辅助性的作用.包含在 java.lang.annotation 包中. 1.元注解 元注解是指注解的注解.包括  @Retention @Target @Document @Inherited四种. 1.1.@Retention: 定义注解的保留策略 @Retention(RetentionPolicy.SOURCE) //注解仅