2

列挙型のインポートステートメントと少し混乱しています。次のスニペットを検討してください。

UsernamePasswordAuthenticationFilter getUsernamePasswordAuthenticationFilter() {

    UsernamePasswordAuthenticationFilter usernamePasswordAuthenticationFilter =
            new UsernamePasswordAuthenticationFilter();
    usernamePasswordAuthenticationFilter.setAllowSessionCreation(false);
    usernamePasswordAuthenticationFilter.setUsernameParameter(SecurityConstants.CREDENTIALS_USERNAME.getText());
    usernamePasswordAuthenticationFilter.setPasswordParameter(SecurityConstants.CREDENTIALS_PASSWORD.getText());

この特定の表記は長すぎます。

SecurityConstants.CREDENTIALS_PASSWORD.getText()

enumこの場合、alltogetherの使用を正当化します。のような列挙型を参照することは可能CREDENTIALS_PASSWORD.getText()ですか?

なぜそれが可能であると感じているのかわかりません.JUnit assertステートメントの静的インポートが私の脳に反映されているのかもしれませんassertEquals().静的インポートで簡単に行うことができます.

列挙型と同様の方法はありますか?

列挙型クラス自体:

public enum SecurityConstants {
    CREDENTIALS_PROCESSING_URL("app/authenticate"),
    CREDENTIALS_USERNAME("username"),
    CREDENTIALS_PASSWORD("password");

    private String text;

    SecurityConstants(String text) {
        this.text = text;
    }

    public String getText() {
        return text;
    }
}
4

2 に答える 2

3

はい、可能です。

import static SecurityConstants.*

参考までにJLS。 7.5.4. 静的インポート オンデマンド宣言

static-import-on-demand 宣言を使用すると、名前付き型のアクセス可能なすべての静的メンバーを必要に応じてインポートできます。

StaticImportOnDemandDeclaration:
     import static TypeName . * ;

TypeName は、クラス型、インターフェイス型、列挙型、または注釈型の正規名 (§6.7) でなければなりません。

于 2015-04-11T20:00:16.293 に答える
1

列挙型をインポートするだけで、列挙型インスタンスを直接呼び出します。また、必要なテキストと同じ列挙型インスタンス名を作成する場合は、getText() を呼び出す必要はありません。

ところで、静的インポートを使用する必要があります。

于 2015-04-11T19:53:32.667 に答える