Không thể ép kiểu được lớp Object?

Chào mọi người. ArrayList.toArray() sẽ return kiểu Object nhưng mình ép kiểu về String[] thì IDE không báo lỗi nhưng khi chạy thì cosole báo “Exception in thread "main" java.lang.ClassCastException: class [Ljava.lang.Object; cannot be cast to class [Ljava.lang.String; ([Ljava.lang.Object; and [Ljava.lang.String; are in module java.base of loader 'bootstrap')

Bạn muốn làm gì với đoạn code này? Chuyển ArrayList thành Array?

String[] arr = list.stream().toArray(String[]::new);
for (String a : arr) {
	System.out.println(a);
}
6 Likes

bạn nên tránh ép kiểu dạng này, cho dù có ép kiểu thành công thì cũng sẽ bị tụi sonar nó bắt nếu dự án có apply. Nếu ngôn ngữ chưa hỗ trợ hoặc với những kiểu dữ liệu tự tạo, bạn có thể viết thêm extension để trả về kiểu mong muốn. Mà thông thường, với những kiểu dữ liệu tự tạo như interface, abstract class… mà phải ép kiểu thì dường như mình đã làm sai ở đâu đó.

4 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?