枚举简写调用 - 静态导入

时间:2015-04-11 19:48:46

标签: java import static-import

我对枚举的import语句有点困惑。请考虑以下代码段:

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。是否可以引用像CREDENTIALS_PASSWORD.getText()这样的枚举?

我不知道为什么我觉得这是可能的,也许JUnit断言语句静态导入反映在我的大脑中,因为你可以使用静态导入进行短路assertEquals()

有没有办法用枚举做simillar?

Enum类本身:

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;
    }
}

2 个答案:

答案 0 :(得分:2)

是的,这是可能的。

import static SecurityConstants.*

JLS作为参考。 7.5.4. Static-Import-on-Demand Declarations

  

static-import-on-demand声明允许根据需要导入命名类型的所有可访问静态成员。

StaticImportOnDemandDeclaration:
     import static TypeName . * ;
  

TypeName必须是类类型,接口类型,枚举类型或注释类型的规范名称(第6.7节)。

答案 1 :(得分:1)

只需导入枚举,然后直接调用枚举实例。如果你创建枚举实例名称,就像你想要的文本一样 - 不需要调用getText()。

你必须使用静态导入btw。