zoukankan      html  css  js  c++  java
  • 读ActiveAndroid番外——Field

      在学习ActiveAndroid的过程中接触到的第一个比较生疏的概念就是Field。这个类表示一个类的成员。光这样说比较绕,我们可以看个小例子。首先定义一个类LType:

    public class LType{
        public String uid;
        
        public String name="lsy";
        public void print(String content){
            if(content != null){
                System.out.println(content);    
            }else{
                System.out.println("it is LType");
            }        
        }
    }

       我们可以首先通过getClass()方法获得这个类,然后获取它的成员:

            LType testType = new LType();
            Class<? extends LType> type = testType.getClass();
            try {
                Field field = type.getField("uid");
            } catch (NoSuchFieldException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (SecurityException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

      通过上面的方法,我们即可尝试获得LType这个类中名为uid的成员。

      值得一提的是,关于获得成员有两个方法,getField(String fieldName)方法只能获得public成员,而getDeclaredField(String fieldName)则可以获得任一成员变量,只要fieldName正确。

      如果不知道fieldName也不要紧,我们可以使用getFields()/getDeclaredFields()方法,获得Field[],其中包含了这个类的所有成员。

      获得了field之后,我们就可以通过getType获得它的类型;通过getName获得它的成员名;通过get(Object obj)方法获取成员的值(obj为LType的实例)甚至可以通过getAnnotation(Class class)方法获取它的成员注解信息。但是注解信息有其专门的格式,这个留在明天看。

      

      这个Field可以配合反射使用,根据成员的名称去调用相应的方法。在做的项目中,json解析就是用的这个原理。ActiveAndroid中也是通过这个,读取成员名,然后根据注解建成表中的字段 ,进行读写。总之,这个类看起来简单,却可以结合其他方法达到很多灵活的效果。

      加班比较多,只能写一点点。。。

    Done~

  • 相关阅读:
    初涉「带权并查集」&&bzoj3376: [Usaco2004 Open]Cube Stacking 方块游戏
    【树形dp】7.14城市
    【树形背包】bzoj4033: [HAOI2015]树上染色
    【计数】51nod1677 treecnt
    【树链剖分 差分】bzoj3626: [LNOI2014]LCA
    【最短路径树】51nod1443 路径和树
    python--异常处理
    常用模块之hashlib,configparser,logging模块
    面向对象之反射及内置方法
    python之封装
  • 原文地址:https://www.cnblogs.com/fishbone-lsy/p/4916010.html
Copyright © 2011-2022 走看看