如何通过Java反射获取一个类属性的类型要类型Class<

如何通过Java反射获取一个类属性的类型要类型Class<,第1张

先获取Method对象

以下仅供参考

package comkiddtestzhidao;

import javalangreflectMethod;

/

  Hello world!

 

 /

public class Main {

    public static void main(String[] args) {

        Method method1 = null;

        Method method2 = null;

        try {

            method1 = ClassforName("comkiddtestzhidaoCat")getMethod("getName", (Class<>[]) null);

            method2 = ClassforName("comkiddtestzhidaoCat")getMethod("getChilds", (Class<>[]) null);

        } catch (NoSuchMethodException ex) {

            exprintStackTrace();

        } catch (SecurityException ex) {

            exprintStackTrace();

        } catch (ClassNotFoundException ex) {

            exprintStackTrace();

        }

        if (null != method1) {

            Systemoutprintln(method1getGenericReturnType()getTypeName());

        }

        if (null != method2) {

            Systemoutprintln(method2getGenericReturnType()getTypeName());

        }

    }

}

class Cat {

    private String name;

    private Cat[] childs;

    public String getName() {

        return name;

    }

    public void setName(String name) {

        thisname = name;

    }

    public Cat[] getChilds() {

        return childs;

    }

    public void setChilds(Cat[] childs) {

        thischilds = childs;

    }

}

对象gerClass()getName()就是了,对象时谁的,最后就是谁的全名,不会有内部类的区别

如果没有对象那就是:类名classgetName(),不过这样是闲的无聊,有类名,再返回字符串形式的类名

背景介绍:在一个Bean类中,需要通过反射机制获得private字段属性时,如果用通常获得步骤获得会报如下错误: javalangIllegalAccessException: Class Test can not access a member of class Bean with modifiers "private" at sunreflectReflectionensureMemberAccess(Reflectionjava:57) at javalangreflectFielddoSecurityCheck(Fieldjava:811) at javalangreflectFieldgetFieldAccessor(Fieldjava:758) at javalangreflectFieldget(Fieldjava:228) 解决如下代码实现代码: 1Beanclass内容如下: public class Bean { private String aa; } 2Testclass内容如下: public class Test { public static void main(String[] args) throws SecurityException, NoSuchFieldException, IllegalArgumentException, IllegalAccessException { Bean test = new Bean(); Field f = BeanclassgetDeclaredField("aa"); //其中,最关键的代码是: //fsetAccessible(true); //这行代码把对象data上的name字段设置为public访问属性 fsetAccessible(true); Systemoutprintln(fget(test)); fset(test, "t2"); Systemoutprintln(fget(test)); } } 运行Test类输出如下: null t2

反射不是通过get取值的,是通过该对象的信息,比如说名称、内存地址等来访问类,方法,属性等,可以获取任意对象的信息,但不能获得私有属性(private String s=“sd”;)的值,切记

推荐《JAVA核心技术》这本书会对你有帮助的

等你学过SSH之后你就明白为要用反射了,牛B的框架都是通过配置文件,即反射机制来做的

例如吧,你想把a对象放到b对象中,但是你并不知道B对象的方法名叫什么

,或者并不知道用户会将方法名定义成什么

这个时候,你只需要在配置文件中,或者是用注解,写上去那么通过反射就可以得到某个方法了

反射机制是比较高级的东西,你还是踏踏实实的吧,

就这么说你可以理解不了,也并不知道他的意义在哪,

只有等你接触的框架,代码多了自然会明白他的作用

Java中要用到反射,首先就必须要获取到对应的class对象,在Java中有三种方法获取类对应的class对象。 1、通过类的class属性 2、通过类实例的getClass()方法获取

以上就是关于如何通过Java反射获取一个类属性的类型要类型Class<全部的内容,包括:如何通过Java反射获取一个类属性的类型要类型Class<、java中如何通过反射获取一个.java文件中的所有类。、java中如何实现private反射获得对象字段值的等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9823180.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-02
下一篇 2023-05-02

发表评论

登录后才能评论

评论列表(0条)

保存