2016-11-30 16 views
1

Этот вопрос не о том, как может произойти загрязнение кучи. Этот вопрос заключается не в том, какое влияние имеет аннотация @SafeVarargs. Я понимаю, что он используется для подавления предупреждений как локально, так и на сайтах вызовов. Я прочитал documentation. Мой вопрос: почему эта аннотация добавлена ​​на язык Java вообще?Является ли присутствие/отсутствие аннотации @SafeVarargs действительно полезным различием?

Рассмотрим следующий пример:

  1. Отсутствие аннотации не полезное различие. Никогда не бывает ситуации, когда вы можете намереваться использовать VarArgs небезопасным способом, то есть «UnsafeVarargs».

    Это отличается от других аннотаций, таких как @Override, где отсутствие аннотации является полезным отличием: «Эй, я не намерен переопределять какой-либо метод в моем суперклассе, предупредите меня, если кто-то добавит метод с той же подписью к моему суперкласс «.

  2. Либо программисты знают, как безопасно пользоваться Varargs, либо нет. Если они добавят аннотацию, это не изменит это. Так разве это не просто ложное чувство безопасности для звонящих?

    Это напоминает мне ошибочное представление о том, что держать ручку двери автомобиля при закрытии двери не позволит вам запереть ключи внутри.

  3. Продолжая из пункта 2, было бы лучше отключить предупреждение по всему миру по умолчанию, а затем снова включить его во всем мире при проведении обширного обзора?

Возможно, у меня что-то не хватает. Может быть, аннотация играет полезную роль при переносе из старых версий Java? Я приветствую ваши ответы. Благодарю.

ответ

2

Продолжая из пункта 2, было бы лучше отключить предупреждение по всему миру по умолчанию, а затем повторно включить его во всем мире, когда вы сделаете обширный обзор?

Это звучит как действительно плохой вещь для реальности.

В действительности, вы стремитесь кнулевой допустимости политики. Нулевые отходы в вашем коде, нулевые предупреждения, нулевые ошибки, тестирование нулевого блока не удается. И вы постоянно проверяете свои «счета». Вы добавляете 5 строк кода в свой класс; и этот класс получает желтый цвет! (затмение говорит вам о предупреждениях там) ... вы заходите и исправить их - сразу. И не в какой-то гипотетической будущей точке времени, когда кто-то случается, чтобы предупреждать глобально.

Другими словами: вы никогда не должны считать, чтобы отключить предупреждения по всему миру.

Итак, наоборот: бывают случаи, когда компилятор может только обнаружить: «там может быть проблемой», - и тогда компилятор лучше предупреждает об этом. Но в ситуациях, когда программист может оценить ситуацию , оценивают ситуацию, такие аннотации - это простое прямое выражение (работающее на действительно локальной области!), Чтобы подавить это предупреждение компилятора.

Но вы, безусловно, правы в своем предположении, что программист, который не понимает varargs, может непреднамеренно использовать эту аннотацию неверным образом. Разумной стратегией для решения может быть: «например, обзоры кода сосредоточены на коде, который использует эту аннотацию». Вместо глобального предупреждения.