我使用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 );
}
}
}
答案 0 :(得分:81)
IDEA指的是 package-private 可见性。
可以使用修饰符
public
声明一个类,在这种情况下,该类对所有类都可见。如果一个类没有修饰符(默认值,也称为包私有),它只在自己的包中可见
有关详细信息,请参阅Controlling Access to Members of a Class。
您可以通过从类中删除public
关键字来解决问题(如果该类不打算在包外使用),或者使用其他包中的类。
答案 1 :(得分:74)
如果您要取消此警告:
编辑:在最新的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的答案对于找到如何做是非常有帮助的。