學(xué)習(xí)啦>知識(shí)大全>方法百科>產(chǎn)品使用方法>

java 反射調(diào)用set方法

時(shí)間: 陳哲凡673 分享

  Java語(yǔ)言中的許多庫(kù)類(lèi)名稱(chēng),多與咖啡有關(guān)。下面是學(xué)習(xí)啦小編為您帶來(lái)的java 反射調(diào)用set方法,希望對(duì)大家有所幫助。

  java 反射調(diào)用set方法:

  import java.beans.PropertyDescriptor;

  import java.lang.reflect.Field;

  import java.lang.reflect.Method;

  public class ReflectTest {

  public static void main(String[] args) throws Exception {

  Class clazz = Class.forName("TaskProvidePropsList");//這里的類(lèi)名是全名。。有包的話要加上包名

  Object obj = clazz.newInstance();

  Field[] fields = clazz.getDeclaredFields();

  //寫(xiě)數(shù)據(jù)

  for(Field f : fields) {

  PropertyDescriptor pd = new PropertyDescriptor(f.getName(), clazz);

  Method wM = pd.getWriteMethod();//獲得寫(xiě)方法

  wM.invoke(obj, 2);//因?yàn)橹朗莍nt類(lèi)型的屬性,所以傳個(gè)int過(guò)去就是了。。實(shí)際情況中需要判斷下他的參數(shù)類(lèi)型

  }

  //讀數(shù)據(jù)

  for(Field f : fields) {

  PropertyDescriptor pd = new PropertyDescriptor(f.getName(), clazz);

  Method rM = pd.getReadMethod();//獲得讀方法

  Integer num = (Integer) rM.invoke(obj);//因?yàn)橹朗莍nt類(lèi)型的屬性,所以轉(zhuǎn)換成integer就是了。。也可以不轉(zhuǎn)換直接打印

  System.out.println(num);

  }

  }

  }

  Java相關(guān)知識(shí)點(diǎn)拓展:

  JAVA反射機(jī)制是在運(yùn)行狀態(tài)中,對(duì)于任意一個(gè)類(lèi),都能夠知道這個(gè)類(lèi)的所有屬性和方法;對(duì)于任意一個(gè)對(duì)象,都能夠調(diào)用它的任意一個(gè)方法和屬性;這種動(dòng)態(tài)獲取的信息以及動(dòng)態(tài)調(diào)用對(duì)象的方法的功能稱(chēng)為java語(yǔ)言的反射機(jī)制。

  JAVA反射(放射)機(jī)制:“程序運(yùn)行時(shí),允許改變程序結(jié)構(gòu)或變量類(lèi)型,這種語(yǔ)言稱(chēng)為動(dòng)態(tài)語(yǔ)言”。從這個(gè)觀點(diǎn)看,Perl,Python,Ruby是動(dòng)態(tài)語(yǔ)言,C++,Java,C#不是動(dòng)態(tài)語(yǔ)言。但是JAVA有著一個(gè)非常突出的動(dòng)態(tài)相關(guān)機(jī)制:Reflection,用在Java身上指的是我們可以于運(yùn)行時(shí)加載、探知、使用編譯期間完全未知的classes。換句話說(shuō),Java程序可以加載一個(gè)運(yùn)行時(shí)才得知名稱(chēng)的class,獲悉其完整構(gòu)造(但不包括methods定義),并生成其對(duì)象實(shí)體、或?qū)ζ鋐ields設(shè)值、或喚起其methods。

551702