2019-06-26 06:12:39 亲,请 登录 或者 注册
新闻主页 国内新闻 国外新闻 民生资讯 社会动态 各地新闻 经济资讯 时证要闻
 
当前位置:: 瞬间新闻网 >> 社会动态 >> 利用反射获得类信息,以获得泛型为例 内容
利用反射获得类信息,以获得泛型为例
来源:瞬间新闻网 时间:2015-12-23   点击发表评论


java源文件编译成.class字节码。运行时加载类的时候就是加载.class文件。这也是java为什么可以一次编译多次运行!


只要我们得到.class文件那就可以获得类信息!可以利用反射!


方式一:对象.getClass()
方法是根对象Object的方法。是其他类继承Object的getClass方法。

方式二:类名.class,你可以理解为字节码本身就是静态的,类加载的时字节码就进JVM了。所以类.class好比类调用静态方法得调用字节码对象。

方式三:Class.forName()是Class类的静态方法。参数是字符串,字符串是类的全路径名。





455727138\QQ\WinTemp\RichOle\EV~S@@KX3[RY)L71D26OF_C.png"alt="">
下面我以反射的方式获得类中的注解为例


我自己测试的文结构,这个例子仅涉及两个文件。


20151221112254936?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center"alt="">

User.java 为model添加注解,然后利用反射获取注解信息。那我们就可以明白ORM框架注解的原理了,原来是利用反射获取到注解的信息,然后取出来进行sql语句拼写。


20151221112301974?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center"alt="">

操作的文件:fanshe.java


packagetest;

importjava.lang.annotation.Annotation;

importjava.lang.reflect.Constructor;

importjava.lang.reflect.Field;

importjava.lang.reflect.InvocationTargetException;

importjava.lang.reflect.Method;

importannontation.Colum;

importmodel.User;

publicclassfanshe{

    publicstaticvoidmain(Stringarge[])throwsClassNotFoundException,InstantiationException,IllegalAccessException,NoSuchMethodException,SecurityException,IllegalArgumentException,InvocationTargetException{

    Classc=Class.forName(model.User

       Users=(User)c.newInstance();

    //构造对象

    Constructorso=c.getConstructor(int.class,String.class);

    Useruser=(User)so.newInstance(10,adb

    

    

    //获得所有属性

    Field[]fields=c.getDeclaredFields();

    for(Fieldf:fields){

    Annotationan=f.getDeclaredAnnotation(Colum.class);

    print(an

    }

    Methodme=c.getDeclaredMethod(setId,int.class);

    me.invoke(s,200);

    print(s.getId()

    }

    publicstaticvoid print(Strings){

    System.out.println(s);

    }

}

结果:

@annontation.Colum(name=table_id,length=10)

@annontation.Colum(name=table_name,length=200)

200

利用反射我们可以做到在运行时改变类的结构信息。



EChats结合PHP,MYSQL,利用ajax动态数据添加。

qq_16154733:
楼主你好,我最近也在学Echarts,能否把你的demo也发给我参考一下?我的邮箱是56505649...



EChats结合PHP,MYSQL,利用ajax动态数据添加。

qq_16435183:
我刚学echarts,楼主能否把你的demo发给我参考一下?我的邮箱是1130692663@qq.c...






 
推荐新闻
 
 
手机浏览
瞬间新闻网 Total 0.048738(s) query 6, 报料QQ:点击这里给我发消息