什么“可以打包本地”是什么意思? (IDEA检查)

时间:2015-06-06 02:55:11

标签: java intellij-idea inspection

我使用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 );
        }
    }
}

5 个答案:

答案 0 :(得分:81)

IDEA指的是 package-private 可见性。

  

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

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

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

答案 1 :(得分:74)

如果您要取消此警告:

  1. 转到首选项 - >编辑 - >检查
  2. 转到Java - >声明冗余
  3. 选择"声明访问权限可能较弱"
  4. 取消选中"建议包本地可见性..."复选框 右
  5. 编辑:在最新的IDEA发布步骤4中,这看起来已经改为"建议包的私有可见性级别为..."并包括各种条件的几个选项

答案 2 :(得分:23)

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

@SuppressWarnings("WeakerAccess")

答案 3 :(得分:1)

您的HeartBeat类不会在com.xxxxxxxxxxx.app.xxxx包之外的任何地方使用。在这种情况下,您可以声明班级“受保护的”#39;或者'私人'在您的访问中更精确。

如果您不打算在此包之外使用此类,则应更改类声明。如果您打算在此程序包之外使用此类,请将其保留,警告将消失。

E.g:

protected class HeartBeat {
    ...
}

答案 4 :(得分:0)

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

我已经禁用了它,@ ashario的答案对于找到如何做是非常有帮助的。