您的位置:首页 > 其它

第十一天 反射、注解

2015-07-28 18:38 288 查看

Class类和java反射

package com.baidu.test1;
import java.lang.annotation.Annotation;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
public class Test {
public static void main(String[] args) {
Student zhangsan=new Student();
System.out.println("张三本来的年龄是:"+zhangsan.getAge());
Class<? extends Student> clazz=zhangsan.getClass();
//      Class<? extends Student> clazz=Student.class;
try {
Field field=clazz.getDeclaredField("age");
field.setAccessible(true);
field.setInt(zhangsan, 21);
System.out.println("修改后张三的年龄是:"+zhangsan.getAge());
field.setAccessible(false);
} catch (NoSuchFieldException e) {
e.printStackTrace();
} catch (SecurityException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
Field[] fields=clazz.getDeclaredFields();//得到已声明字段
//      Field[] fields=clazz.getFields();//得到公共访问字段
for(int i=0;i<fields.length;i++){
System.out.println("可访问字段:"+fields[i].getName());
}
Method[] methods=clazz.getDeclaredMethods();
for(int i=0;i<methods.length;i++){
System.out.println("方法名:"+methods[i].getName());
Class[] cla=methods[i].getParameterTypes();
for(int j=0;j<cla.length;j++){
System.out.println("方法形参类型名:"+cla[j].getName());
}
}
}
}


package com.baidu.test1;
public class Student {
private int age=20;
private String name;
public String sex;
public int getAge() {
return age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
}




Annotation(注解)

package com.baidu.test1;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotation {
int age();
String name();
String sex();
}


package com.baidu.test1;
import java.lang.reflect.AnnotatedType;
import java.lang.reflect.Field;
public class Clazz {
@MyAnnotation(age=20,name="张三",sex="男")
private Students zhangsan;
@MyAnnotation(age=21,name="李四",sex="女")
private Students lisi;
private Students xiaoming;
public Students getZhangsan() {
return zhangsan;
}
public void setZhangsan(Students zhangsan) {
this.zhangsan = zhangsan;
}
public Students getLisi() {
return lisi;
}
public void setLisi(Students lisi) {
this.lisi = lisi;
}
public Students getXiaoming() {
return xiaoming;
}
public void setXiaoming(Students xiaoming) {
this.xiaoming = xiaoming;
}
public Clazz(){
zhujie();
}

public  void zhujie(){
Class<? extends Clazz> cla=Clazz.class;
Field[] fields=cla.getDeclaredFields();
for(int i=0;i<fields.length;i++){
Field field=fields[i];
System.out.println(field.getName());
MyAnnotation annotation=field.getAnnotation(MyAnnotation.class);
if(annotation!=null){
field.setAccessible(true);
Students students=new Students();
students.setName(annotation.name());
students.setSex(annotation.sex());
students.setAge(annotation.age());
try {
field.set(this,students);//set(Object obj, Object value)将指定对象变量上此 Field 对象表示的字段设置为指定的新值
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
field.setAccessible(false);
}
}
}
}


package com.baidu.test1;
public class Students {
private int age;
private String name;
private String sex;
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
}


package com.baidu.test1;
public class Test1 {
public static void main(String[] args) {
Clazz clazz=new Clazz();
System.out.println(clazz.getZhangsan().getAge());//20
System.out.println(clazz.getLisi().getName());//李四
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: