51

我将 IntelliJ 用于“检查代码”,其结果之一是:

  问题概要 可以本地打包(第 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 );
        }
    }
}
4

5 回答 5

83

IDEA 指的是包私有可见性。

可以使用修饰符声明一个类public,在这种情况下,该类对任何地方的所有类都是可见的。如果一个类没有修饰符(默认值,也称为包私有),则它只在自己的包中可见

有关详细信息,请参阅控制对类成员的访问

您可以通过public从类中删除关键字(如果该类不打算在包外使用)或使用不同包中的类来解决问题。

于 2016-03-26T10:52:51.947 回答
74

如果要抑制此警告:

  1. 转到首选项 -> 编辑器 -> 检查
  2. 转到 Java -> 声明冗余
  3. 选择“声明访问可能较弱”
  4. 取消选中右侧的“建议包本地可见性...”复选框

编辑:在最新的 IDEA 发布第 4 步中,这看起来已更改为“建议包私有可见性级别...”,并包括针对各种条件的多个选项

于 2016-05-09T10:03:59.477 回答
23

可以使用以下代码逐个抑制这些 lint 警告。

@SuppressWarnings("WeakerAccess")
于 2016-12-18T00:31:25.213 回答
1

您的 HeartBeat 类不会在包 com.xxxxxxxxxxx.app.xxxx 之外的任何地方使用。在这种情况下,您可以声明“受保护”或“私有”类,以便更准确地访问。

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

例如:

protected class HeartBeat {
    ...
}
于 2015-06-06T03:56:04.113 回答
0

来自 Android 应用背景,您还需要考虑有时这些警告是多余的。所以对于debug build类,它可以,package localrelease build它可能在包之外使用。

我最终禁用了它,@ashario 的回答对于找到如何做到这一点非常有帮助。

于 2016-12-08T17:13:45.197 回答