Tôi có một số Object
đôi khi chứa một số List<Object>
. Tôi muốn kiểm tra nó với instanceof
và nếu có, hãy thêm một số yếu tố vào nó.Kiểm tra xem đối tượng có phải là ví dụ của Danh sách <Object>
void add(Object toAdd) {
Object obj = getValue();
if (obj instanceof List<?>) {
List<?> list = obj;
if (list instanceof List<Object>) { // Error
((List<Object>) list).add(toAdd);
} else {
List<Object> newList = new ArrayList<Object>(list);
newList.add(toAdd);
setValue(newList);
}
return;
}
throw new SomeException();
}
Và nó nói tôi không thể kiểm tra nếu nó là instanceof List<Object>
vì java không quan tâm và xóa các loại trong <>
. Điều này có nghĩa là tôi phải tạo ArrayList mới mỗi lần? Hoặc có cách nào để kiểm tra điều đó, vd. với sự phản ánh?
Đoạn mã này phải làm gì? – poitroae
Nó được gọi là loại xóa trong Java http://stackoverflow.com/questions/339699/java-generics-type-erasure-when-and-what-happens –
@Michael này sẽ là một wrapper quanh snakeyaml. Nếu tôi có một danh sách trong yaml, nó sẽ phân tích nó thành một số danh sách trong Java. Nếu tôi muốn thêm một phần tử vào danh sách này, tôi cần biết loại danh sách đó là gì. Đó là lý do tại sao tôi tạo một ArrayList mới của kiểu đã biết và thêm tất cả các phần tử cũ vào nó, cộng với một phần tử mới. Sau đó, tôi thay thế danh sách cũ bằng danh sách mới và khi tôi gọi snakeyaml để chuyển đổi nó thành yaml, phần tử được thêm của tôi sẽ có ở đó. – Wolf480pl