枚举 shorthand 调用 - 静态导入
Enums shorthand calls - static imports
我对枚举的导入语句有点困惑。考虑以下代码段:
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 assert 语句静态导入反映在我的大脑中,因为您可以使用静态导入做一些简短的事情assertEquals()
。
有没有办法对枚举做类似的事情?
枚举class本身:
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.*
JLS 供参考。
7.5.4. Static-Import-on-Demand Declarations
A static-import-on-demand declaration allows all accessible static members of a named type to be imported as needed.
StaticImportOnDemandDeclaration:
import static TypeName . * ;
The TypeName must be the canonical name (§6.7) of a class type, interface type, enum type, or annotation type.
我对枚举的导入语句有点困惑。考虑以下代码段:
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 assert 语句静态导入反映在我的大脑中,因为您可以使用静态导入做一些简短的事情assertEquals()
。
有没有办法对枚举做类似的事情?
枚举class本身:
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.*
JLS 供参考。 7.5.4. Static-Import-on-Demand Declarations
A static-import-on-demand declaration allows all accessible static members of a named type to be imported as needed.
StaticImportOnDemandDeclaration:
import static TypeName . * ;
The TypeName must be the canonical name (§6.7) of a class type, interface type, enum type, or annotation type.