注解

@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;

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值