У меня есть немного кода Java (с использованием класса Guava ImmutableList):
@Nonnull
public static <E extends Event> UserHistory<E> forUser(long id, E... events) {
    List<E> list = ImmutableList.copyOf(events);
    return new BasicUserHistory<E>(id, list);
}
Я получаю обычные предупреждения о загрязнении кучи, которые поставляются с таким методом. Поскольку мой метод не выполняет никаких изменений events, он не может ввести загрязнение кучи. Однако, если (из-за стирания) клиент этого метода вызывает его с плохим массивом events, кажется, что он может распространять политику кучи через себя.
Если я аннотирую его с помощью @SafeVarargs, я все равно получаю предупреждение (недопустимо с @SuppressWarnings("varargs")). Но, прочитав документацию Java на загрязнение кучи, я немного неясен относительно правильного набора аннотаций по этому методу.
Я также отмечаю, что ImmutableList.copyOf не помечен как @SafeVarargs (хотя это может быть просто проблема совместимости), но Arrays.asList есть.
Итак, мой вопрос: @SafeVarargs соответствующая аннотация для этого метода, учитывая, что он не встретится с ClassCastException, но может распространять неверно проверенный массив до конечного параметризованного типа и разрешить ClastCastException в клиентском коде?
Я полагаю, исходя из этого ответа, что это безопасно, поскольку код не делает ничего, что зависит от типа events, только на тип его элементов. Это правильное применение руководства?
