黑马程序员技术交流社区

标题: 构造方法中的反射问题 [打印本页]

作者: 王月    时间: 2012-6-26 16:19
标题: 构造方法中的反射问题
Constructor cons=String.class.getConstructor(StringBuffer.class)
在获取String类的构造方法时,怎么确定这个构造方法中是什么参数呢,也有可能是StringBuilder.class类型的啊

作者: 邓杰    时间: 2012-6-26 16:46
Constructor cons=String.class.getConstructor(StringBuffer.class)//你把StringBuffer改成StringBuilder不就行了;
作者: 周兴中    时间: 2012-6-26 17:13
本帖最后由 周兴中 于 2012-6-26 17:14 编辑

你可以遍历String类的所有构造方法,来获取他们的参数的.  其他对象也适用此方法.代码如下:
  1. Constructor[] cons =String.class.getConstructors();//获取该类的所有构造方法.
  2.                 int num=1;
  3.                 for(Constructor con:cons){//遍历构造方法
  4.                         System.out
  5.                                         .println(con.getName() + "--"+(num++) );  //显示构造方法名称
  6.                         Class[] argss = con.getParameterTypes(); //获取该构造方法的所有参数
  7.                         for(Class arg:argss){
  8.                                 System.out.println(arg.getName()); //显示每个参数的类型.
  9.                         }
  10.                         
  11.                 }
复制代码

作者: whocases    时间: 2012-6-26 18:30
在java的API在Construtor类中看到这样一个方法getParameterTypes,能够得到一个构造方法中的参数列表中参数的类型的字节码的一个数组,楼主不妨看一下。
作者: 谭立文    时间: 2012-6-26 23:25
我猜楼主想说的是可以拿到String的构造方法,但我为什么就要拿参数列表为StringBuffer的构造方法。如果在编写本模块代码时已经知道参数类型,那当然可以这么写,如果事先不知道,那一定也是可以某种途径得到的,如读取到某个配置文件,来得到,那时候再确定其类型,一样的道理也是可以做到的。
import java.io.FileInputStream;
import java.io.InputStream;
import java.lang.reflect.Constructor;
import java.util.Properties;
public class Test
{
        public static void main(String[] args) throws Exception
        {
                InputStream inputStream = new FileInputStream("config.properties");
                Properties pro = new Properties();
                pro.load(inputStream);
                String paraType = pro.getProperty("paraType");
                Class paraTypeClass = Class.forName(paraType);
                Constructor paraCon = paraTypeClass.getConstructor(String.class);  //这里构造方法中的参数类型是给的默认假设知道
                Constructor con = String.class.getConstructor(paraTypeClass);  
                String str = (String)con.newInstance(paraCon.newInstance("I love java"));
                System.out.println(str);
        }
}
config.properties  配置文件
paraType = java.lang.StringBuffer




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2