龙空技术网

Java,反射机制,反射调用,反射取值和赋值类静态属性和实例属性

古怪今人 167

前言:

当前大家对“java静态属性”大概比较注重,姐妹们都想要学习一些“java静态属性”的相关内容。那么小编同时在网摘上收集了一些有关“java静态属性””的相关知识,希望大家能喜欢,我们一起来了解一下吧!

反射机制概念

引用

反射的概念是由Smith在1982年首次提出的,主要是指程序可以访问、检测和修改它本身状态或行为的一种能力。这一概念的提出很快引发了计算机科学领域关于应用反射性的研究。它首先被程序语言的设计领域所采用,并在Lisp和面向对象方面取得了成绩。其中LEAD/LEAD++ 、OpenC++ 、MetaXa和OpenJava等就是基于反射机制的语言。

Java反射机制

Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法,对于任意一个对象,都能够调用它的任意一个方法和属性,这种动态获取的信息以及动态调用对象的方法的功能称为Java语言的反射机制。

代码案例

工具类

import java.lang.reflect.Field;public class ReflectCallField {    /**     * @param entryClass     * @param fieldName     * @param <T>     * @return     */    public static <T> T getForStatic(Class entryClass, String fieldName) {        if (entryClass == null) {            return null;        }        T result = null;        try {            // 反射获取            Field callField = entryClass.getDeclaredField(fieldName);            callField.setAccessible(true);            return (T) callField.get(entryClass);        } catch (Exception e) {            e.printStackTrace();        }        return result;    }    /**     * @param entryClass     * @param fieldName     * @param value     */    public static void setForStatic(Class entryClass, String fieldName, Object value) {        if (entryClass == null) {            return;        }        try {            Field callField = entryClass.getDeclaredField(fieldName);            callField.setAccessible(true);            callField.set(fieldName, value);        } catch (Exception e) {            e.printStackTrace();        }    }    /**     * @param entryObject     * @param fieldName     * @param <T>     * @return     */    public static <T> T getForInstance(Object entryObject, String fieldName) {        if (entryObject == null) {            return null;        }        T result = null;        try {            // 反射获取            Field callField = entryObject.getClass().getDeclaredField(fieldName);            callField.setAccessible(true);            return (T) callField.get(entryObject);        } catch (Exception e) {            e.printStackTrace();        }        return result;    }    /**     * @param entryObject     * @param fieldName     * @param value     */    public static void setForInstance(Object entryObject, String fieldName, Object value) {        if (entryObject == null) {            return;        }        try {            Field callField = entryObject.getClass().getDeclaredField(fieldName);            callField.setAccessible(true);            callField.set(entryObject, value);        } catch (Exception e) {            e.printStackTrace();        }    }}

类静态属性,反射取值赋值:

import java.util.HashMap;import java.util.Map;public class StaticModel {    private static Map<String, Object> objectMap = new HashMap<>();    private static Map<String, Object> FILE_TYPE_MAP = new HashMap<>();    static {        objectMap.put("1", new Object());        FILE_TYPE_MAP.put("fileType1", new Object());    }}
import java.util.Map;public class StaticModelDemo {    public static void main(String[] args) {        // 取值        Map<String, Object> objectMap = ReflectCallField.getForStatic(StaticModel.class, "objectMap");        System.out.println(objectMap);        Map<String, Object> FILE_TYPE_MAP = ReflectCallField.getForStatic(StaticModel.class, "FILE_TYPE_MAP");        System.out.println(FILE_TYPE_MAP);        // 赋值        objectMap.put("2", new Object());        FILE_TYPE_MAP.put("fileType2", new Object());        ReflectCallField.setForStatic(StaticModel.class, "objectMap", objectMap);        ReflectCallField.setForStatic(StaticModel.class, "FILE_TYPE_MAP", FILE_TYPE_MAP);        // 取值        objectMap = ReflectCallField.getForStatic(StaticModel.class, "objectMap");        System.out.println(objectMap);        FILE_TYPE_MAP = ReflectCallField.getForStatic(StaticModel.class, "FILE_TYPE_MAP");        System.out.println(FILE_TYPE_MAP);    }}

类实例(成员)属性,反射取值赋值:

import java.util.HashMap;import java.util.Map;public class InstanceModel {    private Map<String, Object> objectMap = new HashMap<>();    private Map<String, Object> FILE_TYPE_MAP = new HashMap<>();    {        objectMap.put("1", new Object());        FILE_TYPE_MAP.put("fileType1", new Object());    }}
import java.util.Map;public class InstanceModelDemo {    public static void main(String[] args) {        InstanceModel instanceModel = new InstanceModel();        // 取值        Map<String, Object> objectMap = ReflectCallField.getForInstance(instanceModel, "objectMap");        System.out.println(objectMap);        Map<String, Object> FILE_TYPE_MAP = ReflectCallField.getForInstance(instanceModel, "FILE_TYPE_MAP");        System.out.println(FILE_TYPE_MAP);        // 赋值        objectMap.put("2", new Object());        FILE_TYPE_MAP.put("fileType2", new Object());        ReflectCallField.setForInstance(instanceModel, "objectMap", objectMap);        ReflectCallField.setForInstance(instanceModel, "FILE_TYPE_MAP", FILE_TYPE_MAP);        // 取值        objectMap = ReflectCallField.getForInstance(instanceModel, "objectMap");        System.out.println(objectMap);        FILE_TYPE_MAP = ReflectCallField.getForInstance(instanceModel, "FILE_TYPE_MAP");        System.out.println(FILE_TYPE_MAP);    }}

标签: #java静态属性