zoukankan      html  css  js  c++  java
  • 通过反射获取常量值

    一:通过反射获取常量值,项目中有个需求需要将请求信息封装到javaBean中

    但是请求信息比较特殊,需要通过编码去获取,而且编码是定义在接口类中的常量,所以为了方便

    特别把这块功能封装起来

    1:定义的常量

     1 /**
     2  * 
     3  */
     4 package com.hlcui.entity;
     5 
     6 /**
     7  * @author Administrator
     8  *
     9  */
    10 public interface ConstantsUtil {
    11     
    12     public static interface TeamFundMgr{
    13         public static final int id = 111;
    14         public static final String name = "李白";
    15         public static final double salary = 15000.000;
    16     }
    17     
    18 }

    2:javaBean类

     1 /**
     2  * 
     3  */
     4 package com.hlcui.entity;
     5 
     6 /**
     7  * @author Administrator
     8  *
     9  */
    10 public class Person {
    11     
    12     private int id;
    13     
    14     private String name;
    15     
    16     private double salary;
    17     
    18     private String mgr;
    19     
    20     public int getId() {
    21         return id;
    22     }
    23 
    24     public void setId(int id) {
    25         this.id = id;
    26     }
    27 
    28     public double getSalary() {
    29         return salary;
    30     }
    31 
    32     public void setSalary(double salary) {
    33         this.salary = salary;
    34     }
    35 
    36     public String getMgr() {
    37         return mgr;
    38     }
    39 
    40     public void setMgr(String mgr) {
    41         this.mgr = mgr;
    42     }
    43 
    44     public String getName() {
    45         return name;
    46     }
    47 
    48 
    49     public void setName(String name) {
    50         this.name = name;
    51     }
    52 
    53     @Override
    54     public String toString() {
    55         return "Person [id=" + id + ", name=" + name + ", salary=" + salary + ", mgr=" + mgr + "]";
    56     }
    57     
    58 }

    3:转换以及测试方法

     1 /**
     2  * 
     3  */
     4 package com.hlcui.test;
     5 
     6 import java.beans.BeanInfo;
     7 import java.beans.Introspector;
     8 import java.beans.PropertyDescriptor;
     9 import java.lang.reflect.Field;
    10 import java.lang.reflect.Method;
    11 
    12 import com.hlcui.entity.ConstantsUtil;
    13 import com.hlcui.entity.Person;
    14 
    15 /**
    16  * @author Administrator
    17  *
    18  */
    19 public class TestOperateConstant {
    20     
    21     private static final String EXCLUDE_FIELD = "class";
    22     
    23     public static void main(String[] args) throws Exception {
    24         Person person = toBean(new Person());
    25         System.out.println(person);
    26     }
    27     
    28     public static <T> T toBean(T t){
    29         Class<?> clazz = t.getClass();
    30         try {
    31             BeanInfo beanInfo = Introspector.getBeanInfo(clazz);
    32             PropertyDescriptor[] props = beanInfo.getPropertyDescriptors();
    33             for(PropertyDescriptor property:props){
    34                 String field = property.getName();
    35                 if(EXCLUDE_FIELD.equals(field)){
    36                     continue;
    37                 }
    38                 Method method = property.getWriteMethod();
    39                 method.invoke(t,getValue(field,ConstantsUtil.TeamFundMgr.class));
    40             }
    41         } catch (Exception e) {
    42             e.printStackTrace();
    43         }
    44         return t;
    45     }
    46     
    47     public static Object getValue(String fieldName,Class<?> clazz)throws Exception{
    48         Field[] fields = clazz.getDeclaredFields();
    49         for(Field field:fields){
    50             String name = field.getName();
    51             if(fieldName.equals(name)){
    52                 return field.get(clazz);
    53             }
    54         }
    55         return null;
    56     }
    57 }

    4:运行结果

    1 Person [id=111, name=李白, salary=15000.0, mgr=null]
  • 相关阅读:
    JAVA——汉诺塔
    JAVA与MySQL连接并显示、管理表格实例
    2019沈阳网选——模拟
    CodeforcesRound#553(Div. 2)(A-D题解)
    CodeforcesRound#551(Div. 2)(A-C题解)
    CodeforcesGlobalRound2(Div.2)ABCE题解
    EducationalCodeforcesRound62(Div. 2)(A-D题解)
    博客搬家
    文本分类基本流程
    卡方检验应用-特征选择
  • 原文地址:https://www.cnblogs.com/warrior4236/p/6954083.html
Copyright © 2011-2022 走看看