如何利用java的反射机制获取嵌套类

如何利用java的反射机制获取嵌套类,第1张

class OuterClass{

class NestClass{}

}

public static void main(String args[]) throws Exception{

  try{

  Class cls=ClassforName("OuterClass");

  Class arrClass[]=clsgetDeclaredClasses();

  for(Class obj:arrClass){

  Systemoutprintln("Nest Class="+objgetName());

  }

  }catch(SecurityException se){

  Systemoutprintln(setoString());

  }catch(Exception e){

  Systemoutprintln(etoString());

  }  

}

反射说白了就是可以获得一个类的所有信息,主要包括方法和属性两部分。

1获得方法包括获得方法的名称,方法的返回类型,方法的访问修饰符,以及通过反射执行这个方法。

2获得属性包括属性的名称,类型,访问修饰符,以及这个属性的值。

这些获得都有相应的API提供 *** 作。

举个例子:

先定义一个类,有age这个属性,以及age的get和set方法:

public class TestRflectionFather {

public int age =32;

public int getAge() {

return age;

}

public void setAge(int age) {

thisage = age;

}

}

然后 *** 作获得所有方法:

import javalangreflectMethod;

public class Testmain {

public static void main(String[] args) throws Exception {

Class clazz = ClassforName("TestRflectionFather");

Method[] methods =clazzgetDeclaredMethods();

for(Method me:methods)

{

Systemoutprintln(megetName());

}

}

}

//最后输出

getAge

setAge

先获取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;

    }

}

// 定义注解并指定java注解保留策略为运行时RUNTIME,运行时注入到JAVA字节码文件里

// 这样才可以在运行时反射并获取它。

@javalangannotationRetention(javalangannotationRetentionPolicyRUNTIME)

@interface MyAnnotation{

String key() default "";

int value()  default 0; 

}

// 使用注解

@MyAnnotation(key="key1",value=200)

class MyClass{}

// 反射注解

public static void main(String[] args){

   MyClass myClass=new MyClass();

   MyAnnotation annotation=myClassgetClass()getAnnotation(MyAnnotationclass);

   Systemoutprintln("key="+annotationkey()+"\tvalue="+annotationvalue());

}

以上就是关于如何利用java的反射机制获取嵌套类全部的内容,包括:如何利用java的反射机制获取嵌套类、说说对java反射的理解,使用反射如何获取一个类的所有方法,使用反射需要注意哪些问题、如何通过Java反射获取一个类属性的类型要类型Class<等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存