Подтвердить что ты не робот

Java @SafeVarargs, почему частные методы должны быть окончательными

У меня есть закрытый метод во внутреннем классе, который является закрытым, я хотел бы использовать аннотацию SafeVarargs. Однако мне требуется либо статический, либо окончательный метод. Почему частный метод также должен быть окончательным? Разве это не избыточно?

4b9b3361

Ответ 1

Это избыточно, и вы поднимаете превосходный момент.

Я думаю, что настоящая причина требования конечного или статического заключается в том, чтобы заставить метод не переопределяться, и, таким образом, подкласс не мог вмешиваться в данные таким образом, чтобы аннотация @SafeVarargs была бесполезной в определении метод.

Но, хотя это избыточно, это не так уж плохо для решения - много раз программисты сделают каждый метод приватным как можно больше, а затем медленно откроют класс по мере необходимости. Если этот метод отмечен окончательным, когда он находится в частной области, то, если метод должен быть открыт, он все равно может содержать аннотацию @SafeVarargs с изменением уровня доступа. Если окончательное удаление умышленно, вы получите ошибку времени компиляции, но если у вас есть это, тот, кто удалит частный доступ (который может быть не сам, в командной среде), не будет путать насчет того, почему удаление модификатора "private" неожиданно заставляет код больше не компилироваться.

Ответ 2

Эта функция является частью Project Coin 2 и будет доступна в Java 9 в июле 2017 года.

Он вызывает прием @SafeVarargs в частных методах.

Ссылка.