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的参数也是"...",表示无限参数
如果我的回答解决了你的疑惑,请采纳!祝学习愉快!
相似问题