Một điều mà nói đến cái tâm là:
java.lang.reflect.Array.newInstance(componentType, 0).getClass();
Nhưng nó tạo ra một thể hiện không cần thiết.
Btw, điều này dường như làm việc:
Class clazz = Class.forName("[L" + componentType.getName() + ";");
Đây là thử nghiệm. Nó in true
:
Integer[] ar = new Integer[1];
Class componentType = ar.getClass().getComponentType();
Class clazz = Class.forName("[L" + componentType.getName() + ";");
System.out.println(clazz == ar.getClass());
The documentation of Class#getName()
xác định đúng định dạng của tên lớp mảng:
Nếu đối tượng lớp này đại diện cho một lớp học của các mảng, sau đó các hình thức nội bộ của tên bao gồm tên của loại phần tử đứng trước một hoặc nhiều ký tự '[' đại diện cho độ sâu của mảng làm tổ.
Cách tiếp cận Class.forName(..)
sẽ không làm việc trực tiếp với nguyên thủy mặc dù - cho họ biết bạn sẽ phải tạo ra một ánh xạ giữa tên (int
) và viết tắt mảng - (I
)
Trang đầu tiên rsion (sử dụng 'Array.newInstance (...). getClass()') * làm * làm việc cho các nguyên thủy. – finnw
vâng, quan điểm của tôi là thứ hai sẽ không. – Bozho
Điều này rất hữu ích, cảm ơn. Vì mục đích của tôi, tôi không cần phải xử lý nguyên thủy để có thể sử dụng được cách tiếp cận. –