Java 枚举速记调用-静态导入
我对enum的import语句感到有点困惑。请考虑以下片段:Java 枚举速记调用-静态导入,java,import,static-import,Java,Import,Static Import,我对enum的import语句感到有点困惑。请考虑以下片段: UsernamePasswordAuthenticationFilter getUsernamePasswordAuthenticationFilter() { UsernamePasswordAuthenticationFilter usernamePasswordAuthenticationFilter = new UsernamePasswordAuthenticationFilter();
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\u 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;
}
}
只需导入枚举,然后直接调用枚举实例。如果使枚举实例名与所需的文本相同,则也可以使用该名称-无需调用getText()
您必须使用静态导入。是的,这是可能的
import static SecurityConstants.*
供参考。
静态按需导入声明允许根据需要导入命名类型的所有可访问静态成员
TypeName必须是类类型、接口类型、枚举类型或注释类型的规范名称(§6.7)
/SecurityConfiguration.java:[97,67]找不到正常导入的符号,我也不能将“app/authenticate”用作枚举名。这就是为什么我觉得自己很棘手:-)@Aubergine必须是静态导入我发现在andrey演示了如何实现静态导入后,我写错了静态导入。谢谢我已经相应地更新了标签,以便其他人可以找到它。你就是那个人!谢谢导入静态com.company.configuration.security.SecurityConstants.*;帮我解决了。
StaticImportOnDemandDeclaration:
import static TypeName . * ;