A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王月 中级黑马   /  2012-6-26 16:19  /  2029 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

Constructor cons=String.class.getConstructor(StringBuffer.class)
在获取String类的构造方法时,怎么确定这个构造方法中是什么参数呢,也有可能是StringBuilder.class类型的啊

4 个回复

正序浏览
我猜楼主想说的是可以拿到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
回复 使用道具 举报
在java的API在Construtor类中看到这样一个方法getParameterTypes,能够得到一个构造方法中的参数列表中参数的类型的字节码的一个数组,楼主不妨看一下。
回复 使用道具 举报
本帖最后由 周兴中 于 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.                 }
复制代码
回复 使用道具 举报
Constructor cons=String.class.getConstructor(StringBuffer.class)//你把StringBuffer改成StringBuilder不就行了;
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马