Class.newInstance() рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдиреЗ рдХрд╛ рдЙрджрд╛рд╣рд░рдг

рдХрд▓реНрдкрдирд╛ рдХреАрдЬрд┐рдП рдХрд┐ рдЖрдкрдХреЛ рдкреНрд░рддрд┐рдмрд┐рдВрдм рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рд╡рд╕реНрддреБ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рдпреБрдХреНрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдХреНрдпрд╛ рд╣рдо рд╢реБрд░реВ рдХрд░реЗрдВ?

рд╣рдо рдЙрд╕ рдХреНрд▓рд╛рд╕ рдХреЗ рд▓рд┐рдП рдХреЛрдб рд▓рд┐рдЦрдХрд░ рд╢реБрд░реВ рдХрд░реЗрдВрдЧреЗ, рдЬрд┐рд╕реЗ рд╣рдо рдЗрдВрд╕реНрдЯреЗрдВрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ:

public class Employee {
    private String name;
    private String lastName;
    private int age;

    {
        age = -1;
        name = "Rob";
        surname = "Stark";
    }

    public Employee(String name, String surname, int age) {
        this.name = name;
        this.surname = surname;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getSurname() {
        return lastName;
    }

    public void setSurname(String surname) {
        this.surname = surname;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "Employee{" +
                "name='" + name + '\'' +
                ", surname='" + surname + '\'' +
                ", age=" + age +
                '}';
    }
}

рдпрд╣ рд╣рдорд╛рд░реА рдХрдХреНрд╖рд╛ рд╣реЛрдЧреА - рдХрдИ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЗ рд╕рд╛рде, рдкреИрд░рд╛рдореАрдЯрд░, рдЧреЗрдЯрд░реНрд╕ рдФрд░ рд╕реЗрдЯрд░реНрд╕ рдХреЗ рд╕рд╛рде рдПрдХ рдХрдиреНрд╕реНрдЯреНрд░рдХреНрдЯрд░, рдПрдХ рдЯреВрд╕реНрдЯреНрд░рд┐рдВрдЧ () рд╡рд┐рдзрд┐, рдФрд░ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдмреНрд▓реЙрдХред рдЕрдм рджреВрд╕рд░реЗ рднрд╛рдЧ рдХреА рдУрд░ рдмрдврд╝рддреЗ рд╣реИрдВ: рдкрд░рд╛рд╡рд░реНрддрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рд╡рд╕реНрддреБ рдмрдирд╛рдирд╛ред рдкрд╣рд▓рд╛ рддрд░реАрдХрд╛ рдЬрд┐рд╕реЗ рд╣рдо рджреЗрдЦреЗрдВрдЧреЗ рд╡рд╣ Class.newInstance() рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдЧрд╛ ред

public class Main {
    public static void main(String[] args) throws InstantiationException, IllegalAccessException {
        Employee employee = Employee.class.newInstance();
        System.out.println("age is " + employee.getAge());
    }
}

рдЙрддреНрдХреГрд╖реНрдЯ! рдЖрдЗрдП рдЕрдкрдирд╛ рдХреЛрдб рдЪрд▓рд╛рдПрдВ рдФрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрдиреЗ рд╡рд╛рд▓реА рдЖрдпреБ рджреЗрдЦреЗрдВред рд▓реЗрдХрд┐рди рд╣рдореЗрдВ рд▓рд╛рдкрддрд╛ рдбрд┐рдлреЙрд▓реНрдЯ рдХрдиреНрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рддреНрд░реБрдЯрд┐ рдорд┐рд▓рддреА рд╣реИред рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╡рд┐рдзрд┐ рдХреЗрд╡рд▓ рд╣рдореЗрдВ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХрдиреНрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрдирд╛рдИ рдЧрдИ рд╡рд╕реНрддреБ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рджреЗрддреА рд╣реИред рдЪрд▓рд┐рдП рдЕрдкрдиреА рдХреНрд▓рд╛рд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рдбрд┐рдлреЙрд▓реНрдЯ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ рдФрд░ рдХреЛрдб рдХреЛ рдлрд┐рд░ рд╕реЗ рдЯреЗрд╕реНрдЯ рдХрд░рддреЗ рд╣реИрдВред

рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢:

рдирдП рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХрд╛ рдХреЛрдб

public Employee() { }

рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдмрд╛рдж, рдпрд╣рд╛рдБ рдЖрдЙрдЯрдкреБрдЯ рд╣реИ:

рдЖрдпреБ 1 рд╣реИ

рдорд╣рд╛рди! рд╣рдордиреЗ рдкрддрд╛ рд▓рдЧрд╛рдпрд╛ рдХрд┐ рдпрд╣ рддрд░реАрдХрд╛ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдЕрдм рд╣реБрдб рдХреЗ рдиреАрдЪреЗ рдПрдХ рдирдЬрд░ рдбрд╛рд▓рддреЗ рд╣реИрдВред рдкреНрд░рд▓реЗрдЦрди рдЦреЛрд▓рдиреЗ рдкрд░, рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рд╣рдорд╛рд░реА рд╡рд┐рдзрд┐ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкрджрд╛рд╡рдирдд рд╣реИ :

рдпрд╣ InstantiationException рдФрд░ IllegalAccessException рдХреЛ рднреА рдлреЗрдВрдХ рд╕рдХрддрд╛ рд╣реИ ред рддрджрдиреБрд╕рд╛рд░, рдкреНрд░рд▓реЗрдЦрди рд╕реЗ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдиреЗ рдХреЗ рджреВрд╕рд░реЗ рддрд░реАрдХреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЕрд░реНрдерд╛рддреН Constructor.newInstance() ред рдЖрдЗрдП рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░реЗрдВ рдХрд┐ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рд╡рд░реНрдЧ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

getConstructors рдФрд░ getDeclaredConstructors рдХреЗ рддрд░реАрдХреЗ

рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рд╡рд░реНрдЧ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП , рд╣рдореЗрдВ рдкрд╣рд▓реЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдЗрд╕рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рджреЛ рддрд░реАрдХреЗ рд╣реИрдВ: getConstructors рдФрд░ getDeclaredConstructors ред

рдкрд╣рд▓рд╛ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░реЛрдВ рдХреА рдПрдХ рд╕рд░рдгреА рджреЗрддрд╛ рд╣реИ, рдФрд░ рджреВрд╕рд░рд╛ рд╕рднреА рдХреНрд▓рд╛рд╕ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░реНрд╕ рдХреА рдПрдХ рд╕рд░рдгреА рджреЗрддрд╛ рд╣реИред

рдЖрдЗрдП рдЕрдкрдиреА рдХрдХреНрд╖рд╛ рдХреЛ рдХреБрдЫ рдЧреЛрдкрдиреАрдпрддрд╛ рджреЗрдВ, рдпрд╛ рдпреВрдБ рдХрд╣реЗрдВ рдХрд┐ рдЖрдЗрдП рдХреБрдЫ рдирд┐рдЬреА рдирд┐рд░реНрдорд╛рдгрдХрд░реНрддрд╛ рдмрдирд╛рдПрдБ рдЬреЛ рдпрд╣ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдВ рдХрд┐ рдпреЗ рддрд░реАрдХреЗ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред

рдЖрдЗрдП рдХреБрдЫ рдирд┐рдЬреА рдирд┐рд░реНрдорд╛рдгрдХрд░реНрддрд╛ рдЬреЛрдбрд╝реЗрдВ:

private Employee(String name, String surname) {
    this.name = name;
    this.lastName = lastName;
}

рдХреЛрдб рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдирд┐рд░реНрдорд╛рдгрдХрд░реНрддрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдирд┐рдЬреА рд╣реИ:

рдЖрдЗрдП рд╣рдорд╛рд░реЗ рддрд░реАрдХреЛрдВ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░реЗрдВ:

public class Main {
	  public static void main(String[] args) {
	      Class employeeClass = Employee.class;

	      System.out.println("getConstructors:");
	      printAllConstructors(employeeClass);

	      System.out.println("\n" +"getDeclaredConstructors:");
	      printDeclaredConstructors(employeeClass);
	  }

	  static void printDeclaredConstructors(Class<?> c){
	      for (Constructor<?> constructor : c.getDeclaredConstructors()) {
	          System.out.println(constructor);
	      }
	  }

	  static void printAllConstructors(Class<?> c){
	      for (Constructor<?> constructor : c.getConstructors()) {
	          System.out.println(constructor);
	      }
	  }
}

рдФрд░ рд╣рдореЗрдВ рдпрд╣ рдкрд░рд┐рдгрд╛рдо рдорд┐рд▓рддрд╛ рд╣реИ:

getConstructors:
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ com.codegym.Employee(java.lang.String,java.lang.String,int)
public.com.codegym.Employee()

getDeclaredConstructors:
private com.codegym.Employee(java.lang.String,java.lang) .String)
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ com.codegym.Employee(java.lang.String,java.lang.String,int)
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ com.codegym.Employee()

рдареАрдХ рд╣реИ, рдЗрд╕ рддрд░рд╣ рд╣рдо рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдСрдмреНрдЬреЗрдХреНрдЯ рддрдХ рдкрд╣реБрдБрдЪ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВред рдЕрдм рд╣рдо рдмрд╛рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдХреНрдпрд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИред

Java.lang.reflect.Constructor рдХреНрд▓рд╛рд╕ рдФрд░ рдЗрд╕рдХреЗ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рддрд░реАрдХреЗ

рдЖрдЗрдП рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рддрд░реАрдХреЛрдВ рдкрд░ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВ рдФрд░ рд╡реЗ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ:

рддрд░реАрдХрд╛ рд╡рд┐рд╡рд░рдг
рдЧреЗрдЯрдирд╛рдо () рдЗрд╕ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХрд╛ рдирд╛рдо рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рд▓реМрдЯрд╛рддрд╛ рд╣реИред
getModifiers () рдПрдХ рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдиреНрдХреЛрдб рдХрд┐рдП рдЧрдП рдЬрд╛рд╡рд╛ рдПрдХреНрд╕реЗрд╕ рд╕рдВрд╢реЛрдзрдХ рд▓реМрдЯрд╛рддрд╛ рд╣реИред
getExceptionTypes () рдХреНрд▓рд╛рд╕ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреА рдПрдХ рд╕рд░рдгреА рджреЗрддрд╛ рд╣реИ рдЬреЛ рдХрдиреНрд╕реНрдЯреНрд░рдХреНрдЯрд░ рджреНрд╡рд╛рд░рд╛ рдШреЛрд╖рд┐рдд рдЕрдкрд╡рд╛рджреЛрдВ рдХреЗ рдкреНрд░рдХрд╛рд░реЛрдВ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддрд╛ рд╣реИред
рдкреИрд░рд╛рдореАрдЯрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ () рд╕рднреА рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдкреИрд░рд╛рдореАрдЯрд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреА рдПрдХ рд╕рд░рдгреА рджреЗрддрд╛ рд╣реИ ред рдпрджрд┐ рдирд┐рд░реНрдорд╛рддрд╛ рдХреЗ рдкрд╛рд╕ рдХреЛрдИ рдкреИрд░рд╛рдореАрдЯрд░ рдирд╣реАрдВ рд╣реИ, рддреЛ рд▓рдВрдмрд╛рдИ 0 рдХреА рдПрдХ рд╕рд░рдгреА рд▓реМрдЯрд╛рддрд╛ рд╣реИред
getParameterTypes () рдШреЛрд╖рдгрд╛ рдХреНрд░рдо рдореЗрдВ рдФрдкрдЪрд╛рд░рд┐рдХ рдкреИрд░рд╛рдореАрдЯрд░ рдкреНрд░рдХрд╛рд░реЛрдВ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рдиреЗ рд╡рд╛рд▓реА рдХрдХреНрд╖рд╛ рд╡рд╕реНрддреБрдУрдВ рдХреА рдПрдХ рд╕рд░рдгреА рджреЗрддрд╛ рд╣реИред
getGenericParameterTypes () рдШреЛрд╖рдгрд╛ рдХреНрд░рдо рдореЗрдВ рдФрдкрдЪрд╛рд░рд┐рдХ рдкреИрд░рд╛рдореАрдЯрд░ рдкреНрд░рдХрд╛рд░реЛрдВ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдкреНрд░рдХрд╛рд░ рдХреА рд╡рд╕реНрддреБрдУрдВ рдХреА рдПрдХ рд╕рд░рдгреА рджреЗрддрд╛ рд╣реИред

getName () рдФрд░ getModifiers ()

рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдЗрдП рдЕрдкрдиреА рд╕рд░рдгреА рдХреЛ рдПрдХ рд╕реВрдЪреА рдореЗрдВ рд▓рдкреЗрдЯреЗрдВред рд╣рдо getName рдФрд░ getModifiers рд╡рд┐рдзрд┐рдпрд╛рдБ рднреА рд▓рд┐рдЦреЗрдВрдЧреЗ :

static List<Constructor<?>> getAllConstructors(Class<?> c) {
    return new ArrayList<>(Arrays.asList(c.getDeclaredConstructors()));
}

static List<String> getConstructorNames(List<Constructor<?>> constructors) {
    List<String> result = new ArrayList<>();
    for (Constructor<?> constructor : constructors) {
        result.add(constructor.toString());
    }
    return result;
}

static List<String> getConstructorModifiers(List<Constructor<?>> constructors) {
    List<String> result = new ArrayList<>();
    for (Constructor<?> constructor : constructors) {
        result.add(Modifier.toString(constructor.getModifiers()));
    }
    return result;
}

рдФрд░ рд╣рдорд╛рд░реА рдореБрдЦреНрдп рд╡рд┐рдзрд┐, рдЬрд╣рд╛рдБ рд╣рдо рд╕рдм рдХреБрдЫ рдХрд╣реЗрдВрдЧреЗ:

public static void main(String[] args) {
    Class employeeClass = Employee.class;
    var constructors = getAllConstructors(employeeClass);
    var constructorNames = getConstructorNames(constructors);
    var constructorModifiers = getConstructorModifiers(constructors);

    System.out.println("Employee class:");
    System.out.println("Constructors :");
    System.out.println(constructorNames);
    System.out.println("Modifiers :");
    System.out.println(constructorModifiers);
}

рдФрд░ рдЕрдм рд╣рдо рд╡рд╣ рд╕рд╛рд░реА рдЬрд╛рдирдХрд╛рд░реА рджреЗрдЦрддреЗ рд╣реИрдВ рдЬреЛ рд╣рдо рдЪрд╛рд╣рддреЗ рд╣реИрдВ:

рдХрд░реНрдордЪрд╛рд░реА рд╡рд░реНрдЧ:
рдирд┐рд░реНрдорд╛рддрд╛:
[рдирд┐рдЬреА com.codegym.Employee(java.lang.String), public
com.codegym.Employee(java.lang.String,java.lang.String,int), public com.codegym.Employee() ]
рд╕рдВрд╢реЛрдзрдХ :
[рдирд┐рдЬреА, рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ, рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ]

getExceptionTypes ()

рдпрд╣ рд╡рд┐рдзрд┐ рд╣рдореЗрдВ рдЙрди рдЕрдкрд╡рд╛рджреЛрдВ рдХреА рдПрдХ рд╕рд░рдгреА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рджреЗрддреА рд╣реИ рдЬреЛ рд╣рдорд╛рд░реЗ рдирд┐рд░реНрдорд╛рддрд╛ рдлреЗрдВрдХ рд╕рдХрддреЗ рд╣реИрдВред рдЖрдЗрдП рдЕрдкрдиреЗ рдПрдХ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░реЗрдВ рдФрд░ рдПрдХ рдирдИ рд╡рд┐рдзрд┐ рд▓рд┐рдЦреЗрдВред

рдпрд╣рд╛рдВ рд╣рдо рдЕрдкрдиреЗ рд╡рд░реНрддрдорд╛рди рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЛ рдереЛрдбрд╝рд╛ рдмрджрд▓рддреЗ рд╣реИрдВ:

private Employee(String name, String surname) throws Exception {
    this.name = name;
    this.lastName = lastName;
}

рдФрд░ рдпрд╣рд╛рдВ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЕрдкрд╡рд╛рдж рдкреНрд░рдХрд╛рд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдФрд░ рдЗрд╕реЗ рдореБрдЦреНрдп рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рд╣реИ :

static List<Class<?>> getConstructorExceptionTypes(Constructor<?> c) {
      return new ArrayList<>(Arrays.asList(c.getExceptionTypes()));
}


var constructorExceptionTypes = getConstructorExceptionTypes(constructors.get(0));
System.out.println("Exception types :");
System.out.println(constructorExceptionTypes);

рдКрдкрд░, рд╣рдордиреЗ рдЕрдкрдиреА рд╕реВрдЪреА рдореЗрдВ рдкрд╣рд▓реЗ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЛ рдПрдХреНрд╕реЗрд╕ рдХрд┐рдпрд╛ред рд╣рдо рдереЛрдбрд╝реА рджреЗрд░ рдмрд╛рдж рдЪрд░реНрдЪрд╛ рдХрд░реЗрдВрдЧреЗ рдХрд┐ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреИрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВред

рдФрд░ рдереНрд░реЛ рдЕрдкрд╡рд╛рдж рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдмрд╛рдж рдЖрдЙрдЯрдкреБрдЯ рджреЗрдЦреЗрдВ :

рдЕрдкрд╡рд╛рдж рдкреНрд░рдХрд╛рд░:
[рдХрдХреНрд╖рд╛ java.lang.Exception]

рдФрд░ рдЕрдкрд╡рд╛рдж рдЬреЛрдбрд╝рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ:

рдЕрдкрд╡рд╛рдж рдкреНрд░рдХрд╛рд░:
[]

рд╕рдм рдХреБрдЫ рдЕрджреНрднреБрдд рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдо рдпрд╣ рдХреИрд╕реЗ рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░реНрд╕ рдХреЛ рдХрд┐рди рдорд╛рдкрджрдВрдбреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ? рдЖрдЗрдП рдЗрд╕рдХрд╛ рднреА рдкрддрд╛ рд▓рдЧрд╛рддреЗ рд╣реИрдВред

getParameters () рдФрд░ getParameterTypes () рдФрд░ getGenericParameterTypes ()

рдЖрдЗрдП рдЕрдкрдиреЗ рдирд┐рдЬреА рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЛ рдкрд░рд┐рд╖реНрдХреГрдд рдХрд░рдХреЗ рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рдХрд░реЗрдВред рдЕрдм рдпрд╣ рдРрд╕рд╛ рджрд┐рдЦреЗрдЧрд╛:

private Employee(String name, String surname, List<String> list) {
    this.name = name;
    this.lastName = lastName;
}

рдФрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рддреАрди рдЕрддрд┐рд░рд┐рдХреНрдд рддрд░реАрдХреЗ рд╣реИрдВ: getParameters рдкреИрд░рд╛рдореАрдЯрд░ рдФрд░ рдЙрдирдХреЗ рдкреНрд░рдХрд╛рд░реЛрдВ рдХрд╛ рдХреНрд░рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, getParameterTypes рдкреИрд░рд╛рдореАрдЯрд░ рдкреНрд░рдХрд╛рд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдФрд░ getGenericParameterTypes рдЬреЗрдирд░рд┐рдХ рдореЗрдВ рд▓рд┐рдкрдЯреЗ рдкреНрд░рдХрд╛рд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП ред

static List<Parameter> getConstructorParameters(Constructor<?> c) {
    return new ArrayList<>(Arrays.asList(c.getParameters()));
}

static List<Class<?>> getConstructorParameterTypes(Constructor<?> c) {
    return new ArrayList<>(Arrays.asList(c.getParameterTypes()));
}

static List<Type> getConstructorParametersGenerics(Constructor<?> c) {
    return new ArrayList<>(Arrays.asList(c.getGenericParameterTypes()));
}

рдФрд░ рд╣рдо рдЕрдкрдиреА рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЗрддрдиреА рдЫреЛрдЯреА рдореБрдЦреНрдп рд╡рд┐рдзрд┐ рдореЗрдВ рдХреБрдЫ рдФрд░ рдЬрд╛рдирдХрд╛рд░реА рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ:

var constructorParameterTypes = getConstructorParameterTypes(constructors.get(0));
var constructorParameters = getConstructorParameters(constructors.get(0));
var constructorParametersGenerics = getConstructorParametersGenerics(constructors.get(0));

System.out.println("Constructor parameters :");
System.out.println(constructorParameters);

System.out.println("Parameter types :");
System.out.println(constructorParameterTypes);

System.out.println("Constructor parameter types :");
System.out.println(constructorParametersGenerics);

рдЖрдЙрдЯрдкреБрдЯ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рд╣рдо рдЕрдкрдиреЗ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЗ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╣реБрдд рд╡рд┐рд╕реНрддреГрдд рдЬрд╛рдирдХрд╛рд░реА рджреЗрдЦрддреЗ рд╣реИрдВ:

рдирд┐рд░реНрдорд╛рддрд╛ рдкреИрд░рд╛рдореАрдЯрд░:
[java.lang.String arg0, java.lang.String arg1, java.util.List<java.lang.String> arg2]
рдкреИрд░рд╛рдореАрдЯрд░ рдкреНрд░рдХрд╛рд░:
[рд╡рд░реНрдЧ Java.lang.String, рд╡рд░реНрдЧ Java.lang.String, рдЗрдВрдЯрд░рдлреЗрд╕ java.util.List]
рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдкреИрд░рд╛рдореАрдЯрд░ рдкреНрд░рдХрд╛рд░:
[рдХреНрд▓рд╛рд╕ java.lang.String, рдХреНрд▓рд╛рд╕ java.lang.String, java.util.List<java.lang.String>]

рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рд╡рд┐рдзрд┐ рдХреЗ рдмреАрдЪ рдХреЗ рдЕрдВрддрд░ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИред рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкреИрд░рд╛рдореАрдЯрд░ рдкреНрд░рдХрд╛рд░, рд▓рд┐рдкрдЯреЗ рдкреНрд░рдХрд╛рд░, рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рд╕рдм рдХреБрдЫ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╡рд┐рдХрд▓реНрдк рд╣реИрдВред рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛! рдЕрдм рдЬрдм рд╣рдо рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рд╡рд░реНрдЧ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реЛ рдЧрдП рд╣реИрдВ, рддреЛ рд╣рдо рдЕрдкрдиреЗ рд▓реЗрдЦ рдХреЗ рдореБрдЦреНрдп рд╡рд┐рд╖рдп рдкрд░ рд▓реМрдЯ рд╕рдХрддреЗ рд╣реИрдВ - рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдирд╛ред

Constructor.newInstance() рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдирд╛

рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдиреЗ рдХрд╛ рджреВрд╕рд░рд╛ рддрд░реАрдХрд╛ рдХрдиреНрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдкрд░ рдирдИ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ рд╣реИред рдЖрдЗрдП рдПрдХ рдХрд╛рд░реНрдпрд╢реАрд▓ рдЙрджрд╛рд╣рд░рдг рджреЗрдЦреЗрдВ рдФрд░ рджреЗрдЦреЗрдВ рдХрд┐ рд╣рдо рдПрдХ рд╡рд┐рд╢реЗрд╖ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреИрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдпрджрд┐ рдЖрдк рдПрдХ рдПрдХрд▓ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ getConstructor рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП ( getConstructors рдХреЗ рд╕рд╛рде рднреНрд░рдорд┐рдд рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП , рдЬреЛ рд╕рднреА рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░реЛрдВ рдХреА рдПрдХ рд╕рд░рдгреА рджреЗрддрд╛ рд╣реИ)ред GetConstructor рд╡рд┐рдзрд┐ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХрдиреНрд╕реНрдЯреНрд░рдХреНрдЯрд░ рд▓реМрдЯрд╛рддреА рд╣реИ ред

public static void main(String[] args) throws NoSuchMethodException {
    Class employeeClass = Employee.class;
    Constructor<?> employeeConstructor = employeeClass.getConstructor();
    System.out.println(employeeConstructor);
}
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ com.codegym.Employee()

рдФрд░ рдЕрдЧрд░ рд╣рдо рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рдЗрд╕ рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЗ рдкреИрд░рд╛рдореАрдЯрд░ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рдкрд╛рд╕ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

рдпрд╣ рдордд рднреВрд▓реЛ рдХрд┐ рд╣рдо рдХреЗрд╡рд▓ getDeclaredConstructor рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдкрдирд╛ рдирд┐рдЬреА рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

Constructor<?> employeeConstructor2 = employeeClass.getDeclaredConstructor(String.class, String.class, List.class);
System.out.println(employeeConstructor2);

рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣рдо рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХрдиреНрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЖрдЗрдП рдЕрдм рдирд┐рдЬреА рдФрд░ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред

рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдирд┐рд░реНрдорд╛рддрд╛:

Class employeeClass = Employee.class;
Constructor<?> employeeConstructor = employeeClass.getConstructor(String.class, String.class, int.class);
System.out.println(employeeConstructor);

Employee newInstance = (Employee) employeeConstructor.newInstance("Rob", "Stark", 10);
System.out.println(newInstance);

рдкрд░рд┐рдгрд╛рдо рдПрдХ рд╡рд╕реНрддреБ рд╣реИ рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рд╣рдо рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ com.codegym.Employee(java.lang.String,java.lang.String,int)
рдХрд░реНрдордЪрд╛рд░реА {рдирд╛рдо='рд░реЛрдм' рдЙрдкрдирд╛рдо='рд╕реНрдЯрд╛рд░реНрдХ', рдЙрдореНрд░=10}

рд╕рдм рдХреБрдЫ рдмрдврд╝рд┐рдпрд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ! рдЕрдм рд╣рдо рдПрдХ рдирд┐рдЬреА рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЗ рд╕рд╛рде рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВрдЧреЗ:

Constructor<?> declaredConstructor = employeeClass.getDeclaredConstructor(String.class, String.class, List.class);
System.out.println(declaredConstructor);

Employee newInstance2 = (Employee) declaredConstructor.newInstance("Rob", "Stark", new ArrayList<>());
System.out.printf(newInstance2.toString());

рдирддреАрдЬрд╛ рд╣рдорд╛рд░реЗ рдХрдиреНрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреА рдЧреЛрдкрдиреАрдпрддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рддреНрд░реБрдЯрд┐ рд╣реИ:

рдЬрд╛рд╡рд╛ рдЗрд╕ рдХрдиреНрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдирд╣реАрдВ рдмрдирд╛ рд╕рдХрд╛, рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреБрдЫ рдЬрд╛рджреБрдИ рд╣реИ рдЬреЛ рд╣рдо рдореБрдЦреНрдп рд╡рд┐рдзрд┐ рдореЗрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╣рдо рдЕрдкрдиреЗ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЗ рдПрдХреНрд╕реЗрд╕ рд╕реНрддрд░ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рд╕реЗ рд╣рдорд╛рд░реА рдХрдХреНрд╖рд╛ рдХреА рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдмрдирд╛рдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ:

declaredConstructor.setAccessible(true);

рд╡рд╕реНрддреБ рдмрдирд╛рдиреЗ рдХрд╛ рдкрд░рд┐рдгрд╛рдо

рдирд┐рдЬреА com.codegym.Employee(java.lang.String,java.lang.String,java.util.List)
рдХрд░реНрдордЪрд╛рд░реА {рдирд╛рдо='рд░реЛрдм', рдЙрдкрдирд╛рдо='рд╕реНрдЯрд╛рд░реНрдХ', рдЙрдореНрд░=-1}

рд╣рдо рдЕрдкрдиреЗ рдХрдиреНрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдореЗрдВ рдЙрдореНрд░ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рд╡рд╣реА рд░рд╣рддрд╛ рд╣реИ рдЬрдм рдЗрд╕реЗ рдкреНрд░рд╛рд░рдВрдн рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред

рдмрд╣реБрдд рдмрдврд╝рд┐рдпрд╛, рдЪрд▓рд┐рдП рд╕рдВрдХреНрд╖реЗрдк рдХрд░рддреЗ рд╣реИрдВ!

Constructor.newInstance() рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд╛рдн

рджреЛрдиреЛрдВ рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдирд╛рдо рд╕рдорд╛рди рд╣реИ, рд▓реЗрдХрд┐рди рдЙрдирдХреЗ рдмреАрдЪ рдЕрдВрддрд░ рд╣реИрдВ:

Class.newInstance () рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░.рдиреНрдпреВрдЗрдВрд╕реНрдЯреЗрдВрд╕ ()
рдХреЗрд╡рд▓ рдиреЛ-рдПрд░реНрдЧ рдХрдиреНрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЛ рдХреЙрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдорд╛рдкрджрдВрдбреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреА рдкрд░рд╡рд╛рд╣ рдХрд┐рдП рдмрд┐рдирд╛ рдХрд┐рд╕реА рднреА рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЛ рдХреЙрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдХрдиреНрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЛ рджрд┐рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдХреБрдЫ рдЦрд╛рд╕ рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рдкреНрд░рд╛рдЗрд╡реЗрдЯ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░реНрд╕ рдХреЛ рднреА рдмреБрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВред
рдХрдиреНрд╕реНрдЯреНрд░рдХреНрдЯрд░ рджреНрд╡рд╛рд░рд╛ рдШреЛрд╖рд┐рдд рдХрд┐рд╕реА рднреА рдЕрдкрд╡рд╛рдж (рдЪреЗрдХ рдпрд╛ рдирд╣реАрдВ) рдХреЛ рдлреЗрдВрдХрддрд╛ рд╣реИред рдлреЗрдВрдХреЗ рдЧрдП рдЕрдкрд╡рд╛рдж рдХреЛ рд╣рдореЗрд╢рд╛ InvocationTargetException рдХреЗ рд╕рд╛рде рд▓рдкреЗрдЯрддрд╛ рд╣реИ ред

рдЗрди рдХрд╛рд░рдгреЛрдВ рд╕реЗ, Constructor.newInstance() рдХреЛ Class.newInstance() рд╕реЗ рдЕрдзрд┐рдХ рдкрд╕рдВрдж рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ , рдФрд░ рдпрд╣ рд╕реНрдкреНрд░рд┐рдВрдЧ, рдЕрдорд░реВрдж, рдЬрд╝реВрдХреАрдкрд░, рдЬреИрдХреНрд╕рди, рд╕рд░реНрд╡рд▓реЗрдЯ рдЗрддреНрдпрд╛рджрд┐ рдЬреИрд╕реЗ рд╡рд┐рднрд┐рдиреНрди рдврд╛рдВрдЪреЗ рдФрд░ рдПрдкреАрдЖрдИ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рд╡рд┐рдзрд┐ рд╣реИред