Java反射之反射权限和静态属性的赋值

当一个类中的属性是private的时候,需要将

 fieldName.setAccessible(true);

当一个类的属性是静态属性的时候,则直接

 itemListField.set(null, arrayList);

参考例子:

// 获取类Class mediaItemClazz = Class.forName("io.rong.imkit.plugin.image.PictureSelectorActivity$MediaItem");// 获取属性
Field uriField = mediaItemClazz.getDeclaredField("uri");// 设置访问权限
uriField.setAccessible(true);
Field mediaTypeField = mediaItemClazz.getDeclaredField("mediaType");
mediaTypeField.setAccessible(true);// 实例化对象
Object item = mediaItemClazz.newInstance();// 设置属性
uriField.set(item, this.mTakePictureUri.getPath());
mediaTypeField.set(item, 1);

Class holderClazz = Class.forName("io.rong.imkit.plugin.image.PictureSelectorActivity$PicItemHolder");// 获取静态属性
Field itemListField = holderClazz.getDeclaredField("itemList");
itemListField.setAccessible(true);
Field itemSelectedListField = holderClazz.getDeclaredField("itemSelectedList");
itemSelectedListField.setAccessible(true);
ArrayList arrayList = new ArrayList();
arrayList.add(item);// 给静态属性赋值
itemListField.set(null, arrayList);
itemSelectedListField.set(null, null);

原文地址:https://www.cnblogs.com/hbolin/p/11512356.html

时间: 2024-10-20 03:38:22

Java反射之反射权限和静态属性的赋值的相关文章

java中 ++前后差别试题及静态变量一旦赋值不可改变

package javaTest; public class Increment { private static int k=0; public static void main(String[] args) { int j=0; int n=0; for(int i=0;i<100 ;i++){ j=j++; k=k++; n=++n; } System.out.println(j); System.out.println(k); System.out.println(n); } } 结果:

java中 ++前后区别试题及静态变量一旦赋值不可改变

package javaTest; public class Increment { private static int k=0; public static void main(String[] args) { int j=0; int n=0; for(int i=0;i<100 ;i++){ j=j++; k=k++; n=++n; } System.out.println(j); System.out.println(k); System.out.println(n); } } 结果:

转 利用java反射实现两个具有相同属性bean赋值

package com.dobn.bdgcgl.utils; import java.lang.reflect.Field; import java.lang.reflect.Method; public class ClassReflection { /** * @param class1 用于赋值的实体类 * @param class1 需要待赋值的实体类 * @author ym * @CreateTime 2012-11-22下午03:23:23 * 描述:反射实体类赋值 */ publ

ES6入门六:class的基本语法、继承、私有与静态属性、修饰器

基本语法 继承 私有属性与方法.静态属性与方法 修饰器(Decorator) 一.基本语法 1 class Grammar{ 2 constructor(name,age){ //定义对象自身的方法和属性 3 this.name = name, 4 this.age = age 5 } 6 // 在原型上定义只读属性 7 get inva(){ 8 return "JS"; 9 } 10 //在原型上定义可读写属性 11 set skill(val){ 12 this._skill =

JS 实现继承静态属性

在应用中,我们常常设计继承关系,当然静态属性也是很简单的,但是如果把这两者结合到一起,还是需要一些技巧的. 场景描述: 父类:定义静态属性类型,仅仅起到描述的作用,具体的实例化交给每一个子类去做. 定义抽象方法,并且在方法中会调用之前定义的静态属性. 子类:继承父类.子类对静态属性进行赋值. 子类的对象,调用父类的接口. 实现继承代码如下(不是重点): function inherit(sub, sup) {     function F() {}     F.prototype = sup.p

JAVA中的反射只获取属性的get方法

JAVA中的反射只获取属性的get方法 在开发过程中,我们经常需要获取类中某些属性的get方法,此时我们需要使用到反射,例如,我们在获得一个对象后,需要知道该对象的哪些属性有值,哪些没有值,方便我们后面的处理. 譬如在我们拼SQL语句时,就需要知道哪些字段为空或为NULL,此时我们在拼语句的时候需要剔除掉,若是我们采用一般的判断的办法,则会很复杂(需要处理好SQL中的AND关键字的有无 ),当然,我们也有另外的解决办法(例如将非空的键和值存入map中,再将map存入list集合中,然后循环集合做

java 中利用反射机制获取和设置实体类的属性值

JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制. JAVA反射(放射)机制:"程序运行时,允许改变程序结构或变量类型,这种语言称为动态语言".从这个观点看,Perl,Python,Ruby是动态语言,C++,Java,C#不是动态语言.但是JAVA有着一个非常突出的动态相关机制:Reflection,用在Java身上指的是我们可

java高级之反射

--- android培训.java培训.期待与您交流! ---- java高级之反射 一 反射(类的加载概述和加载时机) A:类的加载概述 当程序要使用某个类时,如果该类还未被加载到内存中,则系统会通过加载,连接,初始化三步来实现对这个类进行初始化. 加载 就是指将class文件读入内存,并为之创建一个Class对象.任何类被使用时系统都会建立一个Class对象. 连接 验证 是否有正确的内部结构,并和其他类协调一致 准备 负责为类的静态成员分配内存,并设置默认初始化值 解析 将类的二进制数据

黑马程序员----Java高新技术之反射学习总结

------- android培训.java培训.期待与您交流! ---------- 反射的概念. 1.Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类中的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制. 精妙的总结就是:反射就是将Java类中的各个成分映射成相应的Java类. 3.在Java中,描述事物的各种类同样也是一种事物,也可以用面向对象的方法来描述,即也有一个类来描述众多的J