java反射问题-关于Class和Construction中的newInstance问题

问题描述

关于Class和Construction中的newInstance问题

最近自学java看的张孝祥老师的视频
视频中讲到反射这一课时 张老师举了一个例子
Class cl=Class.forName("java.lang.String");
Constructor con=cl.getConstructor(StringBuffer.class);
然后自己练习
当写完这一行代码的时候
Constructor con=cl.getConstructor(StringBuffer.class);
eclipse 报错
The method getConstructor(Class[]) in the type Class is not applicable for the arguments (Class)
但是在原视频中 并没有报错 (张老师用的是myeclipse)
然后百度搜索问题 得知
Constructor con=cl.getConstructor(StringBuffer.class);
应该写成
Constructor con=cl.getConstructor(new Class[]{StringBuffer.class});
不明所以 接着写下面的代码
String str=(String)con.newInstance(new StringBuffer("123"));
eclipse接着报错
The method newInstance(Object[]) in the type Constructor is not applicable for the arguments (StringBuffer)
参照上面的解决方式把代码改成
String str=(String)con.newInstance(new Object[]{new StringBuffer("123")});
eclipse就编译通过了
但是当我自定义一个person类时 person类中有一个构造函数
person(String name,int age)
再用constructor.newInstance创建person对象时 却不知道该如何下手了 求解答

解决方案

怎么可能呢?是你jdk的原因?

public Constructor<T> getConstructor(Class<?>... parameterTypes)

是可变参数,不用建个Class数组啊
我敲了一下,完全没有问题啊

Class<?> cl = Class.forName("java.lang.String");
Constructor<?> con = cl.getConstructor(StringBuffer.class);
String str = (String) con.newInstance(new StringBuffer("123"));
System.out.println(str);

Class<?> personClz = Class.forName("com.jerome.basic.beans.Person");
Constructor<?> personCon = personClz.getConstructor(String.class,
                int.class);
Person person = (Person) personCon.newInstance("Jerome", 24);
System.out.println(person.toString());

console out:

123
Person [name=Jerome, age=24]

解决方案二:

遇到同样的问题,我猜是JDK版本问题,我用的是1.8的版本

时间: 2024-08-18 09:56:29

java反射问题-关于Class和Construction中的newInstance问题的相关文章

java反射机制系列(二)例子

下面我以顾客买相机为例来说明Java反射机制的应用.例子中涉及的类和接口有: Camera接口:定义了takePhoto()方法. Camera01类:一种照相机的类型,实现Camera接口. Camera02类:另一种照相机的类型,实现Camera接口. Seller类:卖照相机. Customer类:买相机,有main方法. 所有类都放在com包里 程序如下: public interface Camera { //声明照相机必须可以拍照 public void takePhoto(); }

java反射机制 getreturntype是如何知道方法返回值类型的

问题描述 java反射机制 getreturntype是如何知道方法返回值类型的 各位大神,小弟有一事不明 我们有一个变量,就是方法名 java反射机制 getReturnType()是如何知道我要定义的这个方法的返回值类型. 它怎么知道我要的这个方法应该返回什么值?? 解决方案 java编译后的.class文件里面记录了类的全部信息,包括方法的返回值.参数.异常等.程序运行时,.class文件会被加载到运行时数据区,java反射 机制就是从类型信息中获取装载类解析后的详细信息的. 解决方案二:

java 反射机制

今天和同事一起开发一个Android App的时候,第一次接触到了反射机制这样一个东西,于是上网查了很多资料,看了一些文档.现在终于有了一点了解,故将其写下,大牛勿喷.   首先,我们所学的编程语言大致可以分为两种,第一种为静态语言:C.C++.java ,这些语言的的变量类型一旦确定将不可更改:还有一类为动态语言:Perl.Python  这些语言的变量类型是可以更改的.但是java又区别于一般的静态语言,因为其具有动态机制,所以java可以加载一个在运行时才确定的Class,得知其完整的构造

在java反射中如何将c.newInstance()转为具体的类 而不是object?

问题描述 在java反射中如何将c.newInstance()转为具体的类 而不是object? package test.action; import test.entity.City; public class Test { public static void main(String[] args) { City c=new City("111","江苏","22"); show(City.class); } public static v

JAVA 反射获取返回值为MAP类型中的key

问题描述 publicMap<String,Object>getInfo(){Map<String,Object>data=newHashMap<String,Object>();data.put("a",1);returndata;} JAVA反射机制能获取到返回值MAP中的键a嘛?如果不行,有什么其它方法? 解决方案 解决方案二:这要用什么反射map的原生API就可以获取到KEY了解决方案三:Class<YourClass>clazz

java反射_改变private中的变量及方法的简单实例_java

java反射_改变private中的变量及方法的简单实例 class DemoTest{ private String name="123"; public getName(){ system.out.println("public getName " + name); return name; } private getName2(){ system.out.println("private getName2 " + name); return

Android中Java反射技术的使用示例

MainActivity如下: package cn.testreflect; import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.Method; import android.os.Bundle; import android.app.Activity; /** * Demo描述: * Android中Java反射技术的使用示例 * 在Java中描述字节码文

反射-java代码实现生成一套表中的数据,包括表的关联关系

问题描述 java代码实现生成一套表中的数据,包括表的关联关系 在a表中生成一套a表中的数据,只是一个字段值不一样而已,并且还要生成表的关系关系 相当于在原来表关系的基础上在生成一套新的数据.

Java反射机制:包括组成、结构和示例说明等内容

第1部分 Java 反射机制介绍 Java 反射机制.通俗来讲呢,就是在运行状态中,我们可以根据"类的部分已经的信息"来还原"类的全部的信息".这里"类的部分已经的信息",可以是"类名"或"类的对象"等信息."类的全部信息"就是指"类的属性,方法,继承关系和Annotation注解"等内容. 举个简单的例子:假设对于类ReflectionTest.java,我们知道的