Constructor类这里getConstructor(),newInstance()参数
来源:2-3 Constructor构造方法对象
Joey_yxy
2020-07-14 21:13:46
package com.jory.reflect.entity;
public class Dog {
private String name;
private Integer age;
static {
System.out.println("Dog Class has loaded into JVM");
}
public Dog() {
}
public Dog(String name, Integer age) {
this.name = name;
this.age = age;
System.out.println("Dog带参构造");
}
@Override
public String toString() {
return "Dog{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
}package com.jory.reflect.entity;
public class Cat {
private String name;
private Integer age;
static {
System.out.println("Cat Class has loaded into JVM");
}
public Cat() {
}
public Cat(String name, Integer age) {
this.name = name;
this.age = age;
System.out.println("带参构造");
}
@Override
public String toString() {
return "Cat{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
}package com.jory.reflect.entity;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
public class ConstructorSample {
public static void main(String[] args) {
try {
Class catClass = Class.forName("com.jory.reflect.entity.Cat");
Class dogClass = Class.forName("com.jory.reflect.entity.Dog");
Constructor catConstructor = catClass.getConstructor(String.class,Integer.class);
Constructor dogConstructor = dogClass.getConstructor(String.class,Integer.class);
Cat cat = (Cat) catConstructor.newInstance("joey",2);
Dog dog = (Dog) dogConstructor.newInstance("Sam",4);
System.out.println(cat.getName() + cat.getAge());
System.out.println(dog.getName() + dog.getAge());
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
}老师,Constructor类这里getConstructor(),newInstance()参数直接传入对应的类和对应的值好像也可以,所以是否必须写成new Class[]{}与 new Object[]{}的参数形式呢?
1回答
同学你好,并不是必须写成new Class[]{}与 new Object[]{}这样的形式的,同学这样写也是可以的。
原因如下:
getConstructor方法的参数是Class<?>... parameterTypes
Class<?>代表类型,中间的"..."表示无限参数,parameterTypes表示该无限参数的名字
parameterTypes 就是表示参数数组。

所以这里的参数可以写为new Class[]{},也可以直接写String.class,Integer.class等内容。
同理newInstance的参数也是"...",表示无限参数

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