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());
        }
    }

}
发布了57 篇原创文章 · 获赞 0 · 访问量 487

猜你喜欢

转载自blog.csdn.net/weixin_45471415/article/details/104814726