博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java反射机制
阅读量:5101 次
发布时间:2019-06-13

本文共 3089 字,大约阅读时间需要 10 分钟。

1.获取java entity里的属性有俩个方法:getDeclaredField()和getField();

  getField() 只能获取public类型的属性;

  getDeclaredField() 能获取类或接口声明的所有属性;

 如:

import java.lang.reflect.*;  public class HellWorld{    private double a;    public static final int b = 16;    String str = "helloword";     public static void main(String args[]) {       try {            Class cls = Class.forName("HellWorld");            Field fieldlist[] = cls.getDeclaredFields();            for (int i = 0; i < fieldlist.length; i++) {               Field fld = fieldlist[i];               System.out.println("name = " + fld.getName());  //获取属性名              System.out.println("decl class = " + fld.getDeclaringClass()); //所属的声明类              System.out.println("type = " + fld.getType());  //获取属性类型              int mod = fld.getModifiers();                System.out.println("modifiers = " + Modifier.toString(mod));  //属性成员的修饰语              System.out.println("///");            }       }       catch (Throwable e) {            System.err.println(e);       }    } }

 输出:

1     name = a 2     decl class = class HellWorld 3     type = double 4     modifiers = private 5     / 6     name = b 7     decl class = class HellWorld 8     type = int 9     modifiers = public static final10     /11     name = str12     decl class = class HellWorld13     type = class java.lang.String14     modifiers = 15     /

使用场景:可以根据页面post/get过来的参数值,初始化java entity里的对应属性的值。

如:POST  a=2&str=test

1 public void init(HttpServletRequest request){ 2         try { 3             String queryBody = IOUtils.toString(request.getInputStream()); 4              5             Class cls = Class.forName("HelloWorld"); 6              7             if(StringUtils.isNotBlank(queryBody)){ 8                 StringTokenizer st = new StringTokenizer(queryBody, "&"); 9                 10                 while (st.hasMoreTokens()) {11                     String pairs = st.nextToken();12                     String key = pairs.substring(0, pairs.indexOf('='));13                     String value = pairs.substring(pairs.indexOf('=') + 1);14         15                     if(StringUtils.isBlank(value))16                         continue;17                     18                     value = URLDecoder.decode(value, "UTF-8");19                     20                     Field fld = cls.getDeclaredField(key);21                     Class type = fld.getType();22                     if(type.toString().equalsIgnoreCase("double")){23                         fld.setDouble(this, Double.parseDouble(value));24                     }else{25                         fld.set(this, value);26                     }27                 }28             }29             30         } catch(UnsupportedEncodingException e){
31 } catch (IOException e) {
32 } catch (SecurityException e) {
33 } catch (NoSuchFieldException e) {
34 } catch (ClassNotFoundException e) {
35 } catch (IllegalArgumentException e) {
36 } catch (IllegalAccessException e) {
37 }38 }

 

转载于:https://www.cnblogs.com/mihu/p/3799500.html

你可能感兴趣的文章
oracle数据库在启动时(startup)报错ORA-00600: 内部错误代码,参数: [kcratr1_lostwrt], [], [], [], [], [], [], []...
查看>>
程序员面试、算法研究、编程艺术、红黑树、数据挖掘5大系列集锦
查看>>
Linux服务器的那些性能参数指标
查看>>
面试高级算法梳理笔记
查看>>
访问服务器,远程访问linux主机
查看>>
Java Day 09
查看>>
走近Java之幕后的String
查看>>
一些比较好的论坛、博客
查看>>
iOS cocoapods 怎么开源代码
查看>>
第十七节:类与对象-属性-类常量-自动加载对象
查看>>
【博客美化小妙招】你希望有一个可爱的看板娘吗?
查看>>
BZOJ.2159.Crash的文明世界(斯特林数 树形DP)
查看>>
c# 设计模式
查看>>
Android Service被关闭后自动重启,解决被异常kill 服务
查看>>
计蒜客复赛 百度地图导航(最短路,好题,经典拆点)
查看>>
经典排序算法的总结及Python实现
查看>>
【pwnable.kr】fb
查看>>
转-求解最大连续子数组的算法
查看>>
算法为啥子那么难【转】
查看>>
对数器的使用
查看>>