前言:
当前大家对“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静态属性