我对枚举的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;
}
}
答案 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。