Tại thời điểm Runtime, bạn hoàn toàn có thể khởi tạo đối tượng thông qua Constructor của một đối tượng Class bằng cách sử dụng Java Reflection. Trong bài viết này, tôi sẽ giới thiệu cùng mọi người về đối tượng Constructor. Cùng tham khảo nhé.
Java Reflection - Constructors

Lấy đối tượng Constructor

Dưới đây là ví dụ để các bạn lấy đối tượng Constructor từ một đối tượng Class mà bạn đã obtain trước đó.
Class aClass = ...//obtain class object
Constructor[] constructors = aClass.getConstructors();

Khi bạn gọi phương thức getConstructors(), nó sẽ trả về cho bạn danh sách những contrucstor được khai báo là public.

Nếu như bạn biết chính xác các kiểu parameter của constructor mà bạn muốn access đến thì bạn có thể lấy về đối tượng Constructor mà mình mong muốn thay vì phải lấy nguyên 1 mảng bự chát như thế kia. Dưới đây là ví dụ để giúp bạn hình dung dễ dàng hơn về vấn đề này. Trong lớp Person, tôi có một constructor với đầu vào là một String. Tôi sẽ thực hiện lấy nó như sau:
Class personClass = ... //obtain Class object
Constructor constructor = personClass.getConstructor(new Class[]{String.class});

Lưu ý rằng: Khi bạn thực hiện lấy 1 đối tượng Constructor của một lớp bất kỳ, nhưng không chính xác thì nó sẽ quăng ra exception. Cụ thể là NoSuchMethodException, như trong ví dụ nếu lớp Person của tôi không có bất kỳ constructor nào với argument là kiểu String thì nó sẽ ném ra Exception này.

Lấy danh sách các Parameter của một constructor

Bạn chỉ đơn giản gọi phương thức getParameterTypes() để lấy về mảng các parameters. Đối tượng trả về của nó là các đối tượng Class.
Constructor constructor = ... // obtain constructor
Class[] parameterTypes = constructor.getParameterTypes();

Khởi tạo đối tượng từ đối tượng Constructor

Một khi bạn đã có được đối tượng Constructor, bạn có thể gọi phương thức newInstance() để tạo ra đối tượng mới của nó. Bên cạnh đó, nếu như bạn đã biết được các kiểu parameters có thể sử dụng nó để tạo tượng. Ví dụ dưới đây minh họa cho việc tôi muốn tạo ra một đối tượng Person với đầu vào của constructor là kiểu String.

// Lấy đối tượng constructor của Person class với argument là kiểu String
Constructor constructor = Person.class.getConstructor(String.class);
Person person = (Person) constructor.newInstance("Full Name");

Lời kết

Như vậy là tôi vừa trình bày cùng các bạn cách sử dụng Java Reflection để làm việc với các constructor của một lớp bất kỳ. Trong bài viết tiếp theo tôi sẽ giới thiệu về cách làm việc với các Field của một lớp. Các bạn cùng đón đọc nhé.