网站seo服务公司,页面设计代码,潍坊网站优化公司哪家好,泉州最专业手机网站建设定制反射和注解本就是一家人#xff0c;注解离不开反射#xff0c;这里先将反射的写法#xff0c;本文涉到的注解暂时可以不不用理解
1#xff0c;创建一个类
public class ReflexUser {public String name;private String namePrivate;protected String nameProtected;Strin…反射和注解本就是一家人注解离不开反射这里先将反射的写法本文涉到的注解暂时可以不不用理解
1创建一个类
public class ReflexUser {public String name;private String namePrivate;protected String nameProtected;String nameDefault;public void setName(String name) {this.name name;Log.e(ReflexUser, setName: name);}protected String getNameProtected() {return nameProtected;}String getNameDefault() {return nameDefault;}private String getNamePrivate() {return namePrivate;}public String getName() {Log.e(ReflexUser, getName: name);return name;}}2执行反射相关操作 //反射创建对象//反射获取class对象,相当于获取到加载到内存的ReflexUser.classClass? classR Class.forName(com.kx.jetpack.reflex.own.ReflexUser);//反射创建class实例 ,这里相当于new ReflexUser(),如果ReflexUser这个类在其它库中无法new 可以通过这个方法创建对象Object o classR.newInstance();//反射获取对象方法并且执行//根据名字获取class中的方法这里相当于获取到ReflexUser中getName()这个方法Method getName classR.getMethod(getName, null);//根据名字获取class中的方法这里相当于获取到ReflexUser中setName()这个方法//getMethod(String name, Class?... parameterTypes)有两个参数//String name:class中的方法名字//Class?... parameterTypes:可变参数这里相当于方法中设置的参数的类型的class如果没有就为空//这里的getName没有传入的nullsetName有一个String类型所以传入的为String.class//getMethod只能获取到public方法的方法//getDeclaredField:获取所有方法Method setName classR.getMethod(setName, String.class);//执行类的方法相当余ReflexUser.setName方法setName.invoke(o, Reflex Method);//执行类的方法相当余ReflexUser.getName方法//Object invoke(Object obj, Object... args)//Object obj:传入通过反射创建的对象//Object... args可变参数传入对应方法中的值getName.invoke(o, null);//反射获取字段//并对字段进行操作这里获取到ReflexUser中name字段//getField(String name)通过名字获取字段只能获取到public字段//getDeclaredField(String name):通过名字获取字段所有的//这里相当于获取到ReflexUser.name这个字段Field field classR.getField(name);//对字段进行赋值//set(Object obj, Object value)Object obj传入反射创建的对象Object value需要修改的值field.set(o, Reflex field);//执行获取到的方法反射打印值是否修改成功getName.invoke(o, null);
打印结果如下