2.51.初探反射

使用反射 (reflection) 访问属性

使用反射访问方法

使用反射访问静态方法和属性

使用反射访问 private 的方法和属性

反射是什么

public class ReflectionAppMain {
    public static void main(String... args) throws NoSuchFieldException, IllegalAccessException, NoSuchMethodException, InvocationTargetException {
        LittleSuperMarket superMarket = new LittleSuperMarket("大卖场",
                "世纪大道1号", 500, 600, 100);

        MerchandiseV2 m100 = superMarket.getMerchandiseOf(100);

        // TODO 另一种获得Class实例的方法,直接类名点
        Class clazz = MerchandiseV2.class;
//
//        Field countField = clazz.getField("count");
//        System.out.println("通过反射获取count的值:"+countField.get(m100));
//
//        Method buyMethod = clazz.getMethod("buy", int.class);
//        System.out.println(buyMethod.invoke(m100, 10));

//        Field countField = clazz.getDeclaredField("count");
//        countField.setAccessible(true);
//        System.out.println(countField.get(m100));
//        countField.set(m100, 999);
//        System.out.println(countField.get(m100));
//        System.out.println(m100.count);

//        printFields(clazz);
//
//        Field field = clazz.getField("STATIC_MEMBER");
//        System.out.println(field.get(null));

        Method descMethod = clazz.getDeclaredMethod("describe");
        descMethod.setAccessible(true);
        descMethod.invoke(m100);
        descMethod.invoke(superMarket.getMerchandiseOf(0));
        descMethod.invoke(superMarket.getMerchandiseOf(10));
//        m100.describe();

//        Method staticMethod = clazz.getMethod("getNameOf", MerchandiseV2.class);
//        String str = (String) staticMethod.invoke(null, m100);
//        System.out.println(str);

//        Method buyMethod = clazz.getMethod("buy", int.class);
//        buyMethod.invoke(m100, 1);
//        m100.buy(10);


    }

    public static void printFields(Class clazz) {
        System.out.println(clazz.getName() + "里的field");
        for (Field field : clazz.getFields()) {
            System.out.println(field.getType() + " " + field.getName());
        }
    }

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值