我对枚举的导入语句有点困惑。请考虑以下代码片段:
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()
。
有没有办法用枚举做模拟?
枚举类本身:
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;
}
}
是的,这是可能的。
import static SecurityConstants.*
JLS 供参考。7.5.4. 静态按需导入声明
按需静态导入声明允许根据需要导入命名类型的所有可访问静态成员。
StaticImportOnDemandDeclaration:
import static TypeName . * ;
类型名称必须是类类型、接口类型、枚举类型或注释类型的规范名称 (§6.7)。
只需导入枚举,然后直接调用枚举实例。如果你使枚举实例名称与你想要的文本相同,你也一样 - 不需要调用getText()。
顺便说一句,您必须使用静态导入。