"Can be package local" 是什么意思? (想法检查)

What does "Can be package local" mean? (IDEA Inspection)

我在 "Inspect Code" 中使用了 IntelliJ,其结果之一是:

问题概要 可以打包到本地(第 18 行(public class HeartBeat)

这是什么意思,我该如何解决?

整个class是这样的:

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 );
        }
    }
}

您的 HeartBeat class 未在包 com.xxxxxxxxxxx.app.xxxx 之外的任何地方使用。在这种情况下,您可以声明 class 'protected' 或 'private' 以更精确地访问。

如果您不打算在此包之外使用此 class,则应更改 class 声明。如果你打算在这个包之外使用这个class,离开它,警告就会消失。

例如:

protected class HeartBeat {
    ...
}

IDEA 指的是 package-private 可见性。

A class may be declared with the modifier public, in which case that class is visible to all classes everywhere. If a class has no modifier (the default, also known as package-private), it is visible only within its own package

有关详细信息,请参阅 Controlling Access to Members of a Class

您可以通过从 class 中删除 public 关键字(如果 class 不打算在包外使用)或使用 class 来自不同的包。

如果你想抑制这个警告:

  1. 转到首选项 -> 编辑器 -> 检查
  2. 转到Java -> 声明冗余
  3. Select "Declaration access can be weaker"
  4. 取消选中 "Suggest package local visibility..." 复选框 对

编辑:在最新的 IDEA 版本第 4 步中,这看起来已更改为 "Suggest package-private visibility level for ..." 并包括针对各种条件的多个选项

来自 Android 应用程序后台,您还需要考虑有时这些警告是多余的。所以对于 debug build 类,它可以是 package local 但对于 release build 它可能在包外使用。

我已将其禁用,@ashario 的回答对找到如何禁用它很有帮助。

这些 lint 警告中的每一个都可以使用以下代码根据具体情况加以抑制。

@SuppressWarnings("WeakerAccess")