Что означает "Может быть местным пакетом"? (Инспекция IDEA)
Я использовал IntelliJ для "Inspect Code", и один из его результатов:
Краткий обзор проблемы Может быть локальным (по строке 18 (public class HeartBeat)
)
Что это значит, как я могу его исправить?
весь этот класс выглядит следующим образом:
package com.xxxxxxxxxxx.app.xxxx;
public class HeartBeat
{
private static final Logger LOG = LoggerFactory.getLogger( HeartBeat.class );
private final File heartBeatFile;
public HeartBeat( File heartBeatFile )
{
this.heartBeatFile = heartBeatFile;
}
public void beat()
{
try
{
FileUtils.writeStringToFile( heartBeatFile, String.valueOf( System.currentTimeMillis() ) );
}
catch( IOException e )
{
LOG.error( "Error while writing heart beat log", e );
}
}
}
Ответы
Ответ 1
IDEA ссылается на видимость пакета-частного.
Класс может быть объявлен с помощью модификатора public
, и в этом случае этот класс будет виден всем классам. Если класс не имеет модификатора (по умолчанию, также известного как private-package), он отображается только в пределах его собственного пакета
Для получения дополнительной информации см. Управление доступом к членам класса.
Вы можете решить эту проблему, удалив ключевое слово public
из класса (если класс не предназначен для использования вне пакета) или с помощью класса из другого пакета.
Ответ 2
Если вы хотите пресечь это предупреждение:
- Перейдите в раздел "Настройки" → "Редактор" → "Инспекции"
- Перейти к Java → Резервирование декларации
- Выберите "Доступ к декларации может быть слабее"
- Снимите флажки "Предложить пакет локальной видимости..." на
право
Ответ 3
Иногда lint ошибается. Каждое из этих предупреждений lints может быть подавлено на один за другим с помощью следующего кода.
@SuppressWarnings("WeakerAccess")
Ответ 4
Ваш класс HeartBeat не используется нигде вне пакета com.xxxxxxxxxxx.app.xxxx. В этом случае вы можете объявить класс "protected" или 'private' более точным в своем доступе.
Если вы не собираетесь использовать этот класс вне этого пакета, вам следует изменить объявление класса. Если вы намерены использовать этот класс вне этого пакета, оставьте его, и предупреждение исчезнет.
например:.
protected class HeartBeat {
...
}
Ответ 5
Исходя из фона Android-приложения, вам также необходимо учитывать, что иногда эти предупреждения являются избыточными. Поэтому для классов debug build
это может быть package local
, но для release build
оно может использоваться вне пакета.
Я отключил его в конце, а ответ @ashario был очень полезен в поиске того, как это сделать.