Một câu trả lời khác nhau cho thấy sử dụng new HashSet<Point>(myHash)
. Tuy nhiên, mục đích của clone()
là để có được một đối tượng mới cùng loại. Nếu myHash
là một thể hiện của một lớp con của HashSet
, mọi hành vi bổ sung được thêm vào bởi phân lớp phụ sẽ bị mất bằng cách sử dụng new HashSet<Point>(myHash)
.
Cảnh báo truyền không được chọn chỉ là cảnh báo. Có nhiều tình huống trong đó dàn diễn viên được an toàn, nhưng trình biên dịch không đủ thông minh để xác định rằng nó an toàn. Bạn có thể, tuy nhiên, cô lập các cảnh báo vào một phương pháp duy nhất có thể được chú thích với @SuppressWarnings("unchecked")
:
@SuppressWarnings("unchecked")
static <T implements Cloneable> clone(T o) { return (T)(o.clone()); }
http://www.velocityreviews.com/forums/t153068-clones-generics-and-unchecked-cast-warnings .html – Borealid