01/10/2018, 17:24
Làm thế nào để khai báo mảng của một Class không biết trước?
private static <T> boolean isDistinct(T... array)
{
Class t = array.getClass().getComponentType();
if (t.isArray())
{
Class e = t.getComponentType();
----------> e[] insideArray= new e[array.length]; <----------//Unknown class: e[] //Cannot resolve symbol: e
for(e i: insideArray)
e[0] = array[0][0];
return isDistinct(insideArray);
}
for (int i = 0; i < array.length - 1; i += 1)
for (int j = i + 1; j < array.length; j += 1)
if (array[i].equals(array[j]))
return false;
return true;
}
Bài liên quan
Thử dùng hàm newInstance trong Java
https://docs.oracle.com/javase/7/docs/api/java/lang/reflect/Array.html#newInstance(java.lang.Class,%20int...)
https://docs.oracle.com/javase/tutorial/reflect/special/arrayInstance.html
Hi Trần Hoàn.
Mục đích của bạn là gì ? Việc tổng quát hóa quá mức đôi khi phản tác dụng.
Không được bạn à, search và test các kiểu không có ra. Không có cách gì cast từ Object[] thành [I hay ngược lại được, exception hết.
Thực ra mình chỉ cần viết để làm được với int[][][][][]… thôi, mình cũng viết được rồi, nhưng vì muốn tái sử dụng code nên cố viết tổng quát mà không nổi. Chắc mình bỏ cuộc vậy
Nếu muốn làm tiếp thì mình nghĩ làm cách này:
Để ý, mảng ko khác gì một cây đâu.
Mảng 1 chiều int[M] thì cây có depth = 1 với N node lá
Mảng int[NxM] thì là cây có depth = 2, với chiều sâu thứ 1 gồm N node, từ N node đó tồn tại M node con.
Nên noz có thể viết một cấu trúc dữ liệu đặc biệt để giả lập mảng như trên.
À mà mình tìm ra đc 2 link đây
stackoverflow.com
Is it possible to dynamically build a multi-dimensional array in Java?
How to create a nested array of arbitrary depth in java?
Tái sử dụng thì viết vào phương thức rồi gọi lại được gì. Vấn đề gì nhỉ
Anh thử dùng
stackoverflow.com
Array.newInstance()
xemArray initialization using reflection
Cái này là xử lý generic, sử dụng một method cho nhiều dạng dữ liệu khác nhau. Giúp hạn chế duplicate code
YES!!! Nhờ link của mấy bạn nó râu ria ra cái get() này