想生成对象实体,在Reflection动态机制中有两种方法,一种是针对无参数的构造方法,另一个是针对带参数的构造方法。如果想调用的是带参数的构造方法就比较麻烦些,不能再调用Class的newInstance(),而是调用Constructor的newInstance()。首先准备一个Class【】作为Ctor的参数类型(本例中使用了一个double和一个int),获得以此为ctor实参值 ,调用上述专属ctor的newInstance()。

example1:

  Class c=Class.forName("DynTest");//Dyntest是个类 有个不带参数的够着方法

  Objet obj=null;

  obj=c.newInstance();

  System.out.println(obj);

example2:

  Class c=Class.forName("DynTest");

  Class[] pTypes=new Class[]{double.class,int.class};

  Construtor ctor=c.getConstrustor(pType);

  Object[] arg=new Object[]{3.14159,125};

  Object obj=ctor.newInstance(arg);

  System.out.println(obj);

Part2----------------------运行时调用methods------------------------------------------------------------------------------

  这个动作和上述调用“无参数的ctor”相当类似。首先准备一个Class【】作为参数类型like(String,Hashtable),然后为此为自变量调用getMethod(),获得特定的Method object接下来准备一个Object【】 放置自变量,然后调用上述所得之特定Method object的invoke()。

example:

public String func(String s,Hashtable ht){

  system.out.println("func invokeed");

  return s;

}

public static void main(String[] args){

Class c=Class.forName("Test");

Class ptypes[]=new Class【2】;

ptypes[0]=Class.forName("java.lang.String");

ptypes[1]=Class.forName("java.util.Hashtable");

Method m=c.getMethod("func",ptypes);

Test obj=new Test();

Object args[]=new Object[2];

arg[0]=new String("Hello,World");

arg[1]=null;

Object r=m.invoke(obj,arg);

Integer rval=(String)r;

System.out.println(rval);

}

part3--------------------------------fields-------------------------------------

example

public class Test {

public double d;

public static void main(String[] args){

Class f=Class.forName("Test");

Field f=c.getField("d");

Test obj=new Test();

System.out.println("d="+(Double)f.get(obj);

f.set(obj,12.4);

System.out.println("d="+obj.d);

}

}

相关文章:

  • 2021-06-06
  • 2022-01-25
  • 2021-12-03
  • 2022-12-23
  • 2022-12-23
  • 2021-09-30
  • 2022-12-23
猜你喜欢
  • 2021-06-11
  • 2022-12-23
  • 2022-01-27
  • 2021-04-11
  • 2021-04-13
相关资源
相似解决方案