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回答

好帮手慕小班

2020-07-15

同学你好,并不是必须写成new Class[]{}与 new Object[]{}这样的形式的,同学这样写也是可以的。

原因如下:

getConstructor方法的参数是Class<?>... parameterTypes

 Class<?>代表类型,中间的"..."表示无限参数,parameterTypes表示该无限参数的名字

parameterTypes 就是表示参数数组。

http://img.mukewang.com/climg/5f0e6ce5094b036308290166.jpg

所以这里的参数可以写为new Class[]{},也可以直接写String.class,Integer.class等内容。

同理newInstance的参数也是"...",表示无限参数

http://img.mukewang.com/climg/5f0e6d390996b04706880151.jpg

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

0

0 学习 · 16556 问题

查看课程