Atualizado: 04/10/2025

Este conteúdo é original e não foi gerado por inteligência artificial.

Trabalhando com Construtores usando a Classe Constructor em Java

A classe Constructor, do pacote java.lang.reflect, representa os construtores de uma classe. Ela fornece meios para inspecionar as definições de construtores e também para criar instâncias de forma dinâmica.

Principais métodos:

  • String getName(): retorna o nome do construtor.
  • int getModifiers(): retorna um valor inteiro cujos bits indicam os modificadores aplicados.
  • Object newInstance(Object... initargs): cria um novo objeto chamando o construtor, recebendo os argumentos no parâmetro initargs.
  • Class[] getParameterTypes(): retorna um array de objetos Class que representa os tipos dos parâmetros do construtor.
  • Class[] getExceptionTypes(): retorna um array de objetos Class que representa os tipos das exceções que o construtor pode lançar.

Obtendo Construtores

A classe Class fornece métodos para acessar os construtores:

  • Constructor[] getConstructors(): retorna um array com todos os construtores públicos da classe.
  • Constructor[] getDeclaredConstructors(): retorna um array com todos os construtores, independentemente do modificador de acesso.
  • Constructor getConstructor(Class... parameterTypes): retorna um construtor público específico de acordo com os tipos de parâmetros informados. Se não houver um construtor compatível, lança NoSuchMethodException.
  • Constructor getDeclaredConstructor(Class... parameterTypes): retorna um construtor específico, mesmo que não seja público. Se não existir, lança NoSuchMethodException.

Exemplo de Classe

class Person {

    private String name;
    private int age;

    Person() {
        this("Undefined", 1);
    }

    Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    void print() {
        System.out.printf("Person. Name: %s;  Age: %d%n", name, age);
    }
}

Obtendo Todos os Construtores

import java.lang.reflect.*;

public class Program {

    public static void main(String[] args) {

        Class<?> cl = Person.class;
        Constructor<?>[] ctors = cl.getDeclaredConstructors();

        for (Constructor<?> ctor : ctors) {
            System.out.println(ctor);
        }
    }
}

Saída:

Person()
Person(java.lang.String,int)

Obtendo um Construtor Específico

Para buscar um construtor que tenha parâmetros, é necessário indicar os tipos dos parâmetros na ordem correta.

import java.lang.reflect.*;

public class Program {

    public static void main(String[] args) {

        Class<?> cl = Person.class;

        try {
            Constructor<?> ctor = cl.getDeclaredConstructor(String.class, int.class);
            System.out.println(ctor);   // Person(java.lang.String,int)
        } catch (Exception ex) {
            System.out.println(ex);
        }
    }
}

Obtendo os Parâmetros do Construtor

O método getParameterTypes() retorna um array de Class que representa os tipos dos parâmetros. Isso permite inspecionar a assinatura de cada construtor.

import java.lang.reflect.*;

public class Program {

    public static void main(String[] args) {

        Class<?> cl = Person.class;
        Constructor<?>[] ctors = cl.getDeclaredConstructors();

        for (Constructor<?> ctor : ctors) {

            String name = ctor.getName();
            System.out.print(name + "(");

            Class<?>[] params = ctor.getParameterTypes();
            for (Class<?> p : params) {
                System.out.printf("%s, ", p.getName());
            }

            System.out.println(")");
        }
    }
}

Saída:

Person()
Person(java.lang.String, int, )

Criando Objetos com newInstance

O método newInstance(Object... initargs) cria uma nova instância chamando o construtor correspondente. Os argumentos fornecidos devem coincidir em número e tipo com os parâmetros do construtor selecionado.

import java.lang.reflect.*;

public class Program {

    public static void main(String[] args) {

        Class<?> cl = Person.class;

        try {
            Constructor<?> ctor = cl.getDeclaredConstructor(String.class, int.class);
            Person person = (Person) ctor.newInstance("Sam", 23);
            person.print();   // Person. Name: Sam;  Age: 23
        } catch (Exception ex) {
            System.out.println(ex);
        }
    }
}

Neste exemplo, primeiro é obtido o construtor que recebe dois parâmetros:

Constructor<?> ctor = cl.getDeclaredConstructor(String.class, int.class);

Em seguida, o método newInstance() é chamado com os valores que serão passados para esse construtor:

Person person = (Person) ctor.newInstance("Sam", 23);

Resumo

  • A classe Constructor permite acessar e inspecionar os construtores de uma classe.
  • Os métodos getConstructors() e getDeclaredConstructors() listam os construtores públicos ou todos os definidos na classe.
  • Os métodos getConstructor() e getDeclaredConstructor() recuperam um construtor específico de acordo com os tipos de parâmetros.
  • O método getParameterTypes() fornece a lista de tipos dos parâmetros de um construtor.
  • O método newInstance() possibilita a criação dinâmica de objetos com base no construtor selecionado.
Política de Privacidade

Copyright © www.programicio.com Todos os direitos reservados

É proibida a reprodução do conteúdo desta página sem autorização prévia do autor.

Contato: programicio@gmail.com