Không có hỗ trợ ngôn ngữ để làm những gì bạn đang yêu cầu.
Bạn có thể truy cập phản xạ các thành viên của một kiểu tại thời điểm chạy bằng cách sử dụng phản chiếu (ví dụ: với Class.getDeclaredFields()
để lấy một mảng Field
), nhưng tùy thuộc vào những gì bạn đang cố gắng làm, đây có thể không phải là giải pháp tốt nhất.
Xem thêm
Câu hỏi liên quan
Thí dụ
Đây là một ví dụ đơn giản để chỉ một số điều mà phản xạ có thể thực hiện.
import java.lang.reflect.*;
public class DumpFields {
public static void main(String[] args) {
inspect(String.class);
}
static <T> void inspect(Class<T> klazz) {
Field[] fields = klazz.getDeclaredFields();
System.out.printf("%d fields:%n", fields.length);
for (Field field : fields) {
System.out.printf("%s %s %s%n",
Modifier.toString(field.getModifiers()),
field.getType().getSimpleName(),
field.getName()
);
}
}
}
Đoạn mã trên sử dụng sự phản chiếu để kiểm tra tất cả các trường được khai báo của class String
; nó tạo ra kết quả sau:
7 fields:
private final char[] value
private final int offset
private final int count
private int hash
private static final long serialVersionUID
private static final ObjectStreamField[] serialPersistentFields
public static final Comparator CASE_INSENSITIVE_ORDER
Phiên bản Java thứ 2 hiệu quả, Mục 53: Thích giao diện phản chiếu
Đây là những đoạn trích từ cuốn sách:
Cho một Class
đối tượng, bạn có thể có được Constructor
, Method
và Field
trường hợp đại diện các nhà thầu, các phương pháp và các lĩnh vực của lớp. [Họ] cho phép bạn thao túng các đối tác cơ bản của họ một cách phản xạ . Sức mạnh này, tuy nhiên, đi kèm với một cái giá:
- Bạn mất tất cả các lợi ích của việc kiểm tra thời gian biên dịch.
- Mã cần thiết để thực hiện truy cập phản chiếu rất vụng về và dài dòng.
- Hiệu suất bị ảnh hưởng.
Theo quy định, các đối tượng không nên được truy cập phản chiếu trong các ứng dụng bình thường trong thời gian chạy.
Có một số ứng dụng phức tạp yêu cầu phản ánh. Các ví dụ bao gồm [... có chủ đích bị bỏ qua ...] Nếu bạn có bất kỳ nghi ngờ nào về việc liệu ứng dụng của mình có thuộc một trong các loại này hay không, thì có thể là không.