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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

  1. import java.io.EOFException;
  2. import java.lang.reflect.Constructor;
  3. class Demo
  4. {
  5.         private String name;
  6.         Demo()
  7.         {
  8.                 System.out.println("lisi");
  9.         }
  10.         Demo(String name)
  11.         {
  12.                 this.name=name;
  13.         }
  14.         public void getName()
  15.         {
  16.                 System.out.println(name);
  17.         }
  18. }
  19. class Demo1
  20. {
  21.         public static void main(String[] args)
  22.         {
  23.                 //new Demo("zhangsan").getName();
  24.                 Constructor constructor = Demo.class.getConstructor(String.class);
  25.                 Demo d = constructor.newInstance("zhangsan");
  26.                 System.out.println(d);

  27.         }
  28. }
复制代码


Demo1.java:5054: 错误: 不兼容的类型
                Demo d = constructor.newInstance("zhangsan");
                                                ^
  需要: Demo
  找到:    Object
1 个错误
谢谢

评分

参与人数 1技术分 +1 收起 理由
轻语。 + 1 淡定

查看全部评分

4 个回复

倒序浏览
这个问题其实就是一个访问权限的问题  你用的是protected的构造方法
该构造方法在Constructor中无法直接获取 只有通过Demo.class.getDeclaredConstructors();  才可以获取受保护的构造方法
package test2;

import java.io.EOFException;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
class Demo
{
        private String name;
       Demo()  //你的源代码这里是 缺省值
        {
                System.out.println("lisi");
        }
       Demo(String name) //你的源代码这里是 缺省值
        {
                this.name=name;
        }
        public void getName()
        {
                System.out.println(name);
        }
}
public class Demo1
{
        public static void main(String[] args) throws NoSuchMethodException, SecurityException, InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException
        {
                //new Demo("zhangsan").getName();
                //当构造方法是缺省或者私有的时候都必须提供方法  受保护的构造方法只有通过继承才能获取 无法外部访问
               Constructor constructor = Demo.class.getDeclaredConstructor(String.class);
                Demo d = (Demo) constructor.newInstance("zhangsan");
                System.out.println(d);

        }
}


评分

参与人数 1技术分 +1 收起 理由
轻语。 + 1

查看全部评分

回复 使用道具 举报
要加(Demo)强制转换,另外构造函数需要public
回复 使用道具 举报
随风而去 发表于 2014-4-28 17:05
这个问题其实就是一个访问权限的问题  你用的是protected的构造方法
该构造方法在Constructor中无法直接获 ...

谢谢 朋友
回复 使用道具 举报
//当构造方法是缺省或者私有的时候都必须提供方法  受保护的构造方法只有通过继承才能获取 无法外部访问
这句注解有问题

但是有的构造方法是对的
Constructor constructor = Demo.class.getDeclaredConstructor(String.class);
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马