Как отключить сообщение «Доступ может быть частным для пакета» в IntelliJ?

79

При разработке API предупреждающее сообщение «Доступ может быть пакет-пакет» в классах Java может сильно раздражать.

Я уже потратил некоторое время на просмотр настроек, чтобы найти способ отключить это сообщение, но без каких-либо выводов. Есть идеи, как отключить сообщение?

Томас Цубербюлер
источник
6
Мой говорит мне, что метод может быть частным для пакета, но когда я это сделаю, другие места в моем коде, где он вызывается, не будут работать (как и следовало ожидать), так почему он говорит мне, что это может быть пакет -частный? Этого не может быть, если я использую его в другом месте. Не очень полезное предложение от IDE здесь.
Marc Fearby

Ответы:

54

Правило проверки: «Доступ к декларации может быть слабее», и есть две опции, которые можно отключить: «Предложить частный уровень видимости пакета ...»

mboss
источник
68

Перейти к Settings → Editor → Inspectionsтогдашним Java → Declaration redundancy → Declaration access can be weakerправилу.
Здесь вы можете либо отключить его вообще, либо выбрать варианты предложения на правой панели:

введите описание изображения здесь

ДимаСан
источник
62

Чтобы отключить в каждом конкретном случае, используйте

@SuppressWarnings("WeakerAccess")
поиски тишины
источник
6
Это лучший ответ. Делая это, вы на самом деле документируете свое намерение, вместо того, чтобы все покрывать одеялом IDE
rath
3
Я бы сказал, что объявление метода общедоступным уже задокументировало ваше намерение. Но я понял. Если вы скажете это дважды, они начнут верить, что вы действительно это имеете в виду.
Майкл Кей
1
На самом деле это старый антипаттерн - делать все приватным. Пользователи TDD поймут это лучше, чем кто-либо. По сути, если вы не пишете код для распространения и не нуждаетесь в защите внутренних компонентов от пользователей, делая все частным, затрудняет тестирование и рефакторинг. Имея это в виду, Mayne - неплохая идея сделать его широкой IDE.
Брилл
Даже в этом случае я почти уверен, что вы можете настроить некоторые обфускаторы, чтобы изменить доступ за вас.
Earthcomputer
@BrillPappin Есть ли у вас какой-нибудь источник, который я могу прочитать об идее о том, что держать все в минимально возможном доступе (а не «делать все приватным», что, я уверен, никто никогда не защищал) - это антипаттерн? И затрудняет рефакторинг? На мой взгляд, обнародование всего постепенно превратит код в миску спагетти, где все зависит от всего.
SantiBailors 01
8

Переместите курсор на public, нажмите Alt+ Enterи выберите один из вариантов:
введите описание изображения здесь

Джим Хокинс
источник
2
Интересно, что у меня нет опции «Отключить проверку» при выборе «Сделать пакет-частным». (Вероятно, я отключил другой параметр, поэтому я не вижу этот параметр.) Я уверен, что ваш ответ сработает. Спасибо. Решение mboss помогло мне.
Thomas Zuberbuehler
mrek
3
Разве это не отключило бы все предложения «Доступ к объявлению может быть слабее», а не только те, которые предполагают частный пакет?
Джо Уайт
4

Другое решение, не упомянутое до сих пор: если у вас есть метод, который объявлен общедоступным, и IDE сообщает вам, что нет ссылок на метод извне пакета, тогда, возможно, вам нужно добавить тестовый пример, который вызывает этот метод извне. пакет. Другими словами, относитесь к предупреждению как к сигналу об отсутствии тестового примера для общедоступного метода.

Майкл Кей
источник
Поскольку обычно тестируемый класс находится в том же пакете, что и тестируемый класс, на самом деле это ничего не изменит.
Стефан Д.
1
@Stefan: Обычно модульные тесты находятся в одном пакете, но общедоступный API должен быть протестирован, например, в интеграционных или приемочных тестах, и должен использовать общедоступный API, как это сделал бы настоящий клиент. Думаю, извне.
jazz64