@UserInfo(userName = “张三三”,userPasswrod = “123456”)
public class Person {
public String nikeName = “成龙”;
public String name;
private String age;
private String idNum;
public Person() {
}
public Person(String name) {
this.name = name;
}
public Person(String nikeName, String name) {
this.nikeName = nikeName;
this.name = name;
}
private Person(String nikeName, String name, String age) {
this.nikeName = nikeName;
this.name = name;
this.age = age;
}
public void eat() {
LogUtil.d(nikeName + "吃饭");
}
private void sleep() {
LogUtil.d(nikeName + "睡觉");
}
public void hit(int count) {
LogUtil.d(nikeName + "打豆豆" + count + "次");
}
}
@Retention(RetentionPolicy.RUNTIME)
public @interface UserInfo {
String userName();
String userPasswrod();
}
public class Test {
/**
* 反射使用
*/
@SuppressWarnings(“rawtypes”)
public void testReflect() throws Exception {
//获取Class对象
Class<Person> personClass = Person.class;
@SuppressWarnings("rawtypes")
Class aClass = new Person().getClass();
//要使用类的全路径类名
@SuppressWarnings("rawtypes")
Class person = Class.forName("com.bawie.jingba.Person");
//获取属性
//获取所有的属性(只有获取public的)
@SuppressWarnings("rawtypes")
Field[] fields = personClass.getFields();
//获取单个属性
Field nikeName = personClass.getField("nikeName");
//获取所有属性(获取所有声明出的)
@SuppressWarnings("rawtypes")
Field[] declaredFields = personClass.getDeclaredFields();
Field idNum = personClass.getDeclaredField("idNum");
//获取无参构造方法
@SuppressWarnings("rawtypes")
Constructor[] constructors = personClass.getConstructors();
@SuppressWarnings("rawtypes")
Constructor[] declaredConstructors = personClass.getDeclaredConstructors();
//获取有参构造方法
@SuppressWarnings("rawtypes")
Constructor declaredConstructor = personClass.getDeclaredConstructor(String.class);
Constructor constructor = personClass.getConstructor(String.class, String.class);
@SuppressWarnings("rawtypes")
Constructor declaredConstructor1 = personClass.getDeclaredConstructor(String.class, String.class, String.class);
//通过示例化对象
Person person1 = personClass.newInstance();
Person o = (Person) constructor.newInstance("林青霞", "东方不败");
//=================================
//获取所有public方法
@SuppressWarnings("rawtypes")
Method[] methods = personClass.getMethods();
//获取所有的方法
@SuppressWarnings("rawtypes")
Method[] declaredMethods = personClass.getDeclaredMethods();
//获取单个public方法
Method eatMethod = personClass.getMethod("eat");
Method hitMethod = personClass.getMethod("hit", int.class);
//获取单个私有方法
Method sleepMethod = personClass.getDeclaredMethod("sleep");
//调用方法
eatMethod.invoke(person1);
eatMethod.invoke(o);
hitMethod.invoke(person1, 10);
hitMethod.invoke(o, 100);
//调用私有方法
sleepMethod.setAccessible(true);
sleepMethod.invoke(o);
// 更改public属性值
nikeName.set(o, "王祖贤");
//更改私有属性值
idNum.setAccessible(true);
idNum.set(o, "18");
//====================
Class<Person> personClass2 = Person.class;
//获取某个注解
UserInfo annotation = personClass2.getAnnotation(UserInfo.class);
String name = annotation.userName();
String passwrod = annotation.userPasswrod();
//校验
if (name.equals("张三")) {
Toast.makeText(App.sContext,"姓名没毛病",Toast.LENGTH_SHORT).show();
if (passwrod.equals("123456")) {
Toast.makeText(App.sContext,"密码没毛病",Toast.LENGTH_SHORT).show();
}
}else {
Toast.makeText(App.sContext,"哪里出了错呢",Toast.LENGTH_SHORT).show();
}
EventBus eventBus;
}
}