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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© wodeairenw 中级黑马   /  2013-4-30 00:53  /  1275 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 wodeairenw 于 2013-4-30 12:53 编辑
  1. import java.beans.PropertyDescriptor;
  2. import java.lang.reflect.Constructor;
  3. import java.lang.reflect.InvocationTargetException;
  4. import java.lang.reflect.Method;



  5. public class StringTest {

  6.         public static void main(String[] args) throws Exception  {
  7.                 // TODO Auto-generated method stub
  8.                
  9.                 Class<Outer> out =Outer.class;
  10.                
  11.                 Constructor co =out.getConstructor(int.class);//这里为什么报错
  12.                 //接收有int类型的参数啊,怎么会错
  13.                 //如何获取无参数的构造方法?        
  14.                 Outer ot =(Outer) co.newInstance(4);
  15.                 ot.function();
  16.                
  17.                
  18.                 /*
  19.                 //class获得方法
  20.                 Method methodCharAt=out.getMethod("function");
  21.                 methodCharAt.invoke(new Outer());
  22.                 //class获得成员
  23.                 //System.out.println(out.getField("x"));        
  24.                 //内省        
  25.                 String propertyName= "x";//设置属性名
  26.                 //下面是内省的重要对象PropertyDescriptor
  27.                 PropertyDescriptor pd = new PropertyDescriptor(propertyName,out);
  28.                 //Method getReadMethod() 获得应该用于读取属性值的方法。      
  29.                 Method methidGetX = pd.getReadMethod();
  30.                 //Object invoke(Object obj, Object... args)
  31.         //对带有指定参数的指定对象调用由此 Method 对象表示的底层方法
  32.                 Object retVal = methidGetX.invoke(new Outer() );
  33.                 System.out.println(retVal);
  34.                 */
  35.         }


  36. }
  37. abstract class AbsDemo
  38. {
  39.         abstract void show();
  40. }
  41. class Outer
  42. {
  43.         Outer()
  44.         {
  45.                
  46.         };
  47.         Outer(int z)
  48.         {
  49.                 this.z=z;
  50.         };
  51.         int x =3;
  52.         int z;
  53.         public int getX() {
  54.                 return x;
  55.         }
  56.         public void setX(int x) {
  57.                 this.x = x;
  58.         }
  59.         public void function()
  60.         {
  61.                 final int y =9;
  62.                 new AbsDemo()
  63.                 {
  64.                         void show()
  65.                         {
  66.                                 System.out.println("x==="+x);
  67.                                 System.out.println("y==="+y);
  68.                         }
  69.                 }.show();
  70.                
  71.         }
  72. }
复制代码
无参构造方法如何获取,并创建对象。还有有参数的构造方法为什么报错。

评分

参与人数 1技术分 +1 收起 理由
田磊阳 + 1

查看全部评分

2 个回复

倒序浏览
本帖最后由 符立波 于 2013-4-30 10:45 编辑

你上面的只能获取public声明的构造方法,要想获得,又不想加public,那就使用out.getDeclaredConstructor(int.class)
利用无参数的构造方法获取对象可以通过(Outer)out.newInstance()获得,或者(Outer)out.getDeclaredConstructor(null).newInstance(null)
回复 使用道具 举报
符立波 发表于 2013-4-30 10:43
你上面的只能获取public声明的构造方法,要想获得,又不想加public,那就使用out.getDeclaredConstructor(i ...

非常感谢。。。。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马