Как избежать непроверенного предупреждения о бросании при клонировании HashSet?

Я пытаюсь сделать мелкую копию HashSet точек, называемых myHash. На данный момент у меня есть следующее:

HashSet<Point> myNewHash = (HashSet<Point>) myHash.clone();

Этот код дает мне неконтролируемое предупреждение о росте. Есть ли лучший способ сделать это?

Ответы

Ответ 1

Вы можете попробовать следующее:

HashSet<Point> myNewHash = new HashSet<Point>(myHash);

Ответ 2

В другом ответе предлагается использовать 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()); }