Ответ 1
Вы можете попробовать следующее:
HashSet<Point> myNewHash = new HashSet<Point>(myHash);
Я пытаюсь сделать мелкую копию HashSet точек, называемых myHash. На данный момент у меня есть следующее:
HashSet<Point> myNewHash = (HashSet<Point>) myHash.clone();
Этот код дает мне неконтролируемое предупреждение о росте. Есть ли лучший способ сделать это?
Вы можете попробовать следующее:
HashSet<Point> myNewHash = new HashSet<Point>(myHash);
В другом ответе предлагается использовать new HashSet<Point>(myHash)
. Однако целью clone()
является получение нового объекта того же типа. Если myHash
является экземпляром подкласса HashSet
, любое дополнительное поведение, добавленное подклассированием, будет потеряно с помощью new HashSet<Point>(myHash)
.
Неконтролируемое предупреждение о бросании - это просто предупреждение. Существует много ситуаций, когда бросок безопасен, но компилятор просто недостаточно умен, чтобы определить, что он безопасен. Вы можете, однако, изолировать предупреждение в одном методе, который может быть аннотирован с помощью @SuppressWarnings("unchecked")
:
@SuppressWarnings("unchecked")
static <T implements Cloneable> clone(T o) { return (T)(o.clone()); }