Can be package local"の意味は? (IDEA Inspection)

IntelliJで"Inspect Code"を使い、その結果の一つを紹介します。

  問題の概要     パッケージローカルにできる (at line 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 );
        }
    }
}
ソリューション

IDEAはpackage-private visibilityのことを指しています。

クラスは public という修飾子を付けて宣言することができ、その場合、そのクラスはすべてのクラスからどこでも見えるようになります。もしクラスが修飾子を持たない場合(デフォルト、package-privateとしても知られています)、そのクラスは自分のパッケージ内だけで見ることができます。

詳しくは、クラスのメンバーへのアクセスの制御 を参照してください。

この問題は、クラスから public キーワードを削除するか (そのクラスがパッケージの外で使われることを意図していない場合)、別のパッケージからそのクラスを使用することで解決することができます。

解説 (0)

この警告を表示しないようにする場合

1.環境設定 -> エディタ -> インスペクションに移動します。 2.Java -> Declaration redundancyに移動します。 3.Declaration access can be weaker&quotを選択します。 4.右側の "Suggest package local visibility..." のチェックボックスのチェックをはずす。 右

EDIT: 最新のIDEAリリースでは、ステップ4は"Suggest package-private visibility level for ..."に変更され、様々な条件に対するオプションが追加されているように見えます。

解説 (3)

HeartBeatクラスは、com.xxxxxxxxx.app.xxxxパッケージの外では、どこにも使われていません。この場合、クラスは 'protected' または 'private' と宣言することで、より正確にアクセスすることができます。

もし、このクラスをこのパッケージの外で使用するつもりがないのであれば、クラス宣言を変更する必要があります。 もし、このクラスをこのパッケージの外で使うつもりなら、そのままにしておけば警告は消えます。

protected class HeartBeat {
    ...
}
解説 (7)