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
キーワードを削除するか (そのクラスがパッケージの外で使われることを意図していない場合)、別のパッケージからそのクラスを使用することで解決することができます。
この警告を表示しないようにする場合
1.環境設定 -> エディタ -> インスペクションに移動します。 2.Java -> Declaration redundancyに移動します。 3.Declaration access can be weaker"を選択します。 4.右側の "Suggest package local visibility..." のチェックボックスのチェックをはずす。 右
EDIT: 最新のIDEAリリースでは、ステップ4は"Suggest package-private visibility level for ..."に変更され、様々な条件に対するオプションが追加されているように見えます。
HeartBeatクラスは、com.xxxxxxxxx.app.xxxxパッケージの外では、どこにも使われていません。この場合、クラスは 'protected' または 'private' と宣言することで、より正確にアクセスすることができます。
もし、このクラスをこのパッケージの外で使用するつもりがないのであれば、クラス宣言を変更する必要があります。 もし、このクラスをこのパッケージの外で使うつもりなら、そのままにしておけば警告は消えます。
例
protected class HeartBeat {
...
}