黑马程序员技术交流社区

标题: 大家帮我看一下代码要怎么该 才不会报错 [打印本页]

作者: 学习代码    时间: 2014-4-28 16:34
标题: 大家帮我看一下代码要怎么该 才不会报错
  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 个错误
谢谢

作者: 随风而去    时间: 2014-4-28 17:05
这个问题其实就是一个访问权限的问题  你用的是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);

        }
}



作者: doyxy    时间: 2014-4-28 17:08
要加(Demo)强制转换,另外构造函数需要public
作者: 学习代码    时间: 2014-4-28 17:44
随风而去 发表于 2014-4-28 17:05
这个问题其实就是一个访问权限的问题  你用的是protected的构造方法
该构造方法在Constructor中无法直接获 ...

谢谢 朋友
作者: 年轻的老头    时间: 2014-4-28 19:32
//当构造方法是缺省或者私有的时候都必须提供方法  受保护的构造方法只有通过继承才能获取 无法外部访问
这句注解有问题

但是有的构造方法是对的
Constructor constructor = Demo.class.getDeclaredConstructor(String.class);




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