Tôi có một phương pháp trong khuôn khổ thử nghiệm của tôi tạo ra một thể hiện của một lớp học, tùy thuộc vào các thông số được thông qua vào:Java Reflection gọi constructor với các loại nguyên thủy
public void test(Object... constructorArgs) throws Exception {
Constructor<T> con;
if (constructorArgs.length > 0) {
Class<?>[] parameterTypes = new Class<?>[constructorArgs.length];
for (int i = 0; i < constructorArgs.length; i++) {
parameterTypes[i] = constructorArgs[i].getClass();
}
con = clazz.getConstructor(parameterTypes);
} else {
con = clazz.getConstructor();
}
}
Vấn đề là, điều này không có tác dụng nếu các nhà xây dựng có các kiểu dữ, như sau:
public Range(String name, int lowerBound, int upperBound) { ... }
.test("a", 1, 3);
Kết quả trong:
java.lang.NoSuchMethodException: Range.<init>(java.lang.String, java.lang.Integer, java.lang.Integer)
Th e int nguyên thủy được tự động đóng hộp trong các phiên bản đối tượng, nhưng làm thế nào để tôi lấy lại chúng để gọi hàm tạo?
int.class là một phím tắt cho Integer.TYPE, đối với bất kỳ, thậm chí kiểu nguyên thủy trong Java bạn có thể viết: type.class – iirekm
Điều này được cho là một câu trả lời được chấp nhận. Bạn đánh bại Plaudit Design vài giây ;-) Chỉ cần chỉnh sửa để bao gồm bình luận của iirekm. –