web-dev-qa-db-ja.com

「ローカルにパッケージ化できる」とはどういう意味ですか? (IDEA検査)

IntelliJを「コードの検査」に使用しましたが、その結果の1つは次のとおりです。

問題の概要packageパッケージローカルにすることができます(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 );
        }
    }
}
51
Jerry Zhang

IDEAはpackage-private可視性を参照しています。

クラスは修飾子publicを使用して宣言できます。この場合、そのクラスはどこでもすべてのクラスに表示されます。クラスに修飾子がない場合(デフォルト、package-privateとも呼ばれる)、そのクラス内でのみ表示されます

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

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

82
Andrej Herich

この警告を抑制したい場合:

  1. [設定]-> [エディタ]-> [検査]に移動します
  2. Java->宣言の冗長性に移動
  3. 「宣言アクセスはより弱くなる可能性があります」を選択します
  4. 右側の[パッケージのローカル表示を提案...]チェックボックスをオフにします

編集:最新のIDEAリリースステップ4では、これは「...のパッケージプライベートの可視性レベルを提案する」に変更されたように見え、さまざまな条件のいくつかのオプションが含まれています。

74
ashario

これらの各lint警告は、次のコードでケースバイケースで抑制できます。

@SuppressWarnings("WeakerAccess")
23

HeartBeatクラスは、パッケージcom.xxxxxxxxxxx.app.xxxx以外では使用されません。この場合、アクセスをより正確にするために、クラスを「保護」または「プライベート」に宣言できます。

このパッケージの外部でこのクラスを使用する予定がない場合は、クラス宣言を変更する必要があります。このパッケージ外でこのクラスを使用する場合は、そのままにしておくと警告が消えます。

例えば。:

protected class HeartBeat {
    ...
}
1
devonlazarus