说说对java反射的理解,使用反射如何获取一个类的所有方法,使用反射需要注意哪些问题

说说对java反射的理解,使用反射如何获取一个类的所有方法,使用反射需要注意哪些问题,第1张

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

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

第一种:通过forName()方法;

第二种:类class;

第三种:对象getClass()。

举例如下:

package

test;

public class Demo{

public static void

main(){

Class<> c1 = null;

Class<> c2 =

null;

Class<> c3 =

null;

//三种反射用实例化方式

try{

//最常用的一种形式

c1 =

ClassforName("testX");

}catch(ClassNotFoundException

e){

eprintStackTrace();

}

//通过Object类中的方法实例化

c2

= new X()getClass();

//通过类class实例化

c3 =

Xclass;

Systemoutprintln("类名:" + c1getName());

//得到类名

Systemoutprintln("类名:" + c2getName());

//得到类名

Systemoutprintln("类名:" + c3getName());

//得到类名

}

}

给你一段属性反射的代码,你自己看着改吧

       Field[] fs = userClagetDeclaredFields();

       for(int i = 0 ; i < fslength; i++){

           Field f = fs[i];

           fsetAccessible(true); //设置些属性是可以访问的

           Object val = fget(bean);//得到此属性的值   

      

           Systemoutprintln("name:"+fgetName()+"\t value = "+val);

          

           String type = fgetType()toString();//得到此属性的类型

           if (typeendsWith("String")) {

              Systemoutprintln(fgetType()+"\t是String");

              fset(bean,"12") ;        //给属性设值

           }else if(typeendsWith("int") || typeendsWith("Integer")){

              Systemoutprintln(fgetType()+"\t是int");

              fset(bean,12) ;       //给属性设值

           }else{

              Systemoutprintln(fgetType()+"\t");

           }

          

       }

基本就是getType()之后,根据type的类型来反射

先写一个从字符串生成任何类型的对象的函数 public object stringToObject(string str,Type objectType)//传递两个参数,一个是字符串含有每个属性的属性名和值对,属性和值用冒号分隔,属性与属性用逗号分隔,另一个参数是要创建的对象的类型 { string[] shuxing = strSplit(new char[] { ',' });//将字符串分解成 “属性:值”数组 for (int i = 0; i < shuxingLength; i++) { shuxing[i]= shuxing[i]Replace("\"", ""); }//去掉字符串的双引号 object obj = SystemActivatorCreateInstance(objectType); //使用反射动态创建对象 PropertyInfo[] pis =obj GetType()GetProperties(BindingFlagsPublic|BindingFlagsInstance);//获得对象的所有public属性 if (pis != null)//如果获得了属性 foreach (PropertyInfo pi in pis)//针对每一个属性进行循环 { for (int i = 0; i <shuxingLength; i++)//检查字符串中的所有“属性:值”列表 { if (shuxing[i]Split(new char[] { ':' })[0] == piName)//如果对象的属性名称恰好和字符串中的属性名相同 { Type proertyType= piPropertyType; //获得对象属性的类型 piSetValue(obj, ConvertChangeType(shuxing[i]Split(new char[] { ':' })[1],proertyType), null); //将字符串中的字符串类型的“值”转换为对象属性的类型,并赋值给对象属性 } } } return obj; }

以上就是关于说说对java反射的理解,使用反射如何获取一个类的所有方法,使用反射需要注意哪些问题全部的内容,包括:说说对java反射的理解,使用反射如何获取一个类的所有方法,使用反射需要注意哪些问题、java中反射的三种方法是、java 反射 数据类型转换等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存