Có cách nào để tìm hiểu bằng cách phản ánh liệu một constructor là một trình biên dịch tạo ra constructor mặc định hay không? Hay có cách nào khác?Nhà xây dựng có tạo ra hàm tạo mặc định không?
Đáng ngạc nhiên là phương pháp isSynthetic
không cung cấp thông tin này để không thể sử dụng. Và không có chú thích Generated
.
public class JavaTest {
public void run() throws Exception {
out.println(JavaTest.class.getConstructors()[0].isSynthetic()); // Prints false
out.println(Arrays.asList(JavaTest.class.getConstructors()[0].getAnnotations())); // Prints []
}
}
Câu hỏi này hỏi điều tương tự nhưng đối với C#: Detect compiler generated default constructor using reflection in C#
Tôi đoán câu trả lời sẽ giống như câu trả lời của C# :) – PermGenError
Trình tạo mặc định tự động chắc chắn là lỗi thiết kế ngôn ngữ.Trong một thế giới lý tưởng, nó không tồn tại, vậy tại sao bạn thậm chí còn quan tâm :) Tính năng nào phụ thuộc vào việc phát hiện hàm tạo mặc định? – ZhongYu
Trình tạo mặc định tự động rất tuyệt! Đó là để thực hiện phân tích tĩnh. Nếu tôi biết rằng một hàm khởi tạo là mặc định hơn tôi biết, chỉ bằng cách tìm kiếm khai báo trên lớp, rằng nó là rỗng và không, ví dụ, làm rò rỉ con trỏ 'this' này. – Lii