带参构造方法为什么使用包装器类的对象来进行设置的话会报错呢?
来源:3-4 自由编程
慕勒3498910
2020-10-07 20:46:10
com.imooc.reflect.test/Goods.java的内容如下:
package com.imooc.reflect.test;
public class Goods {
// 商品编号
private int id;
// 商品名称
private String name;
// 商品价格
private float price;
// 商品描述
private String desp;
public Goods() {
super();
// TODO Auto-generated constructor stub
}
public Goods(int id, String name, float price, String desp) {
super();
this.id = id;
this.name = name;
this.price = price;
this.desp = desp;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public float getPrice() {
return price;
}
public void setPrice(float price) {
this.price = price;
}
public String getDesp() {
return desp;
}
public void setDesp(String desp) {
this.desp = desp;
}
@Override
public String toString() {
return "商品信息 [商品编号为:" + id + ", 商品名称为:" + name + ", 商品价格为:" + price + ", 商品描述为:" + desp + "]";
}
/**
* 输出商品信息
*/
public void display() {
System.out.println("商品信息");
}
}com.imooc.reflect.test/ConstructorGoods.java这一测试类的内容如下:
package com.imooc.reflect.test;
import java.lang.reflect.Constructor;
import org.junit.Test;
public class ConstructorGoods {
@Test
/**
* 通过Constructor获得无参构造方法,并得到Goods类的对象,然后调用display()方法
* @throws Exception
*/
public void demo1() throws Exception {
Class goodsClass = Class.forName("com.imooc.reflect.test.Goods");
Constructor c = goodsClass.getConstructor();
Goods good = (Goods)goodsClass.newInstance();
good.display();
}
@Test
/**
* 通过Constructor获得有参构造方法,并得到Goods类的对象,然后输出该对象
*/
public void demo2() throws Exception {
Class goodsClass = Class.forName("com.imooc.reflect.test.Goods");
Constructor c = goodsClass.getConstructor(int.class, String.class, float.class, String.class);
// 使用如下的包装器类来设置参数会报错
// Constructor c = goodsClass.getConstructor(Integer.class, String.class, Float.class, String.class);
Goods good = (Goods)c.newInstance(1, "手机", 2000.0f, "黑色,存储容量32G");
good.display();
// 输出该对象
System.out.println(good);
}
}这边,我试了下,在demo2()中使用这样的方式调用构造方法的话
Constructor c = goodsClass.getConstructor(Integer.class, String.class, Float.class, String.class);
最后,控制台输出的内容为:
java.lang.NoSuchMethodException: com.imooc.reflect.test.Goods.<init>(java.lang.Integer, java.lang.String, java.lang.Float, java.lang.String) at java.lang.Class.getConstructor0(Unknown Source) at java.lang.Class.getConstructor(Unknown Source) at com.imooc.reflect.test.ConstructorGoods.demo2(ConstructorGoods.java:28) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
程序无法正常运行。
1回答
同学你好,
1、测试运行同学代码是正确的,棒棒哒!继续加油
2、控制台出现报错是因为同学在Goods中定义的是int,float,而在获取Constructor对象时传入的是Integer.class,Float.class,这样就会报错呢。

如果我的回答解决了你的问题,请采纳,祝学习愉快.
相似问题