[英]Enum to return an implementation of an interface
我有一個名為HeaderProvider
的接口及其實現,
interface HeaderProvider {
Map<String, String> getHeaders();
}
class AHeaderProvider implements HeaderProvider {
...
}
class BHeaderProvider implements HeaderProvider {
...
}
實現是 Spring 托管 bean。 現在我有一個枚舉 URLType
enum URLType{
A,
B....
}
有什么辦法可以在枚舉中使用像HeaderProvider getHeaderProvider()
這樣的方法來返回正確的實現嗎?
只需將HeaderProvider
成員添加到 枚舉
public enum URLType {
A(new AHeaderProvider()), B(new BHeaderProvider());
private HeaderProvider provider;
private URLType(HeaderProvider provider) {
this.provider = provider;
}
public HeaderProvider getHeaderProvider() {
return provider;
}
}
我認為你可以這樣做。
@Component
public class AHeaderProvider implements HeaderProvider, InitializingBean {
private static HeaderProvider headerProvider;
public static HeaderProvider getHeaderProvider() {
return headerProvider;
}
@Override
public void afterPropertiesSet() throws Exception {
headerProvider = this;
}
@Override
public Map<String, String> getHeaders() {
return new HashMap<>();
}
}
@Component
public class BHeaderProvider implements HeaderProvider, InitializingBean {
private static HeaderProvider headerProvider;
public static HeaderProvider getHeaderProvider() {
return headerProvider;
}
@Override
public void afterPropertiesSet() throws Exception {
headerProvider = this;
}
@Override
public Map<String, String> getHeaders() {
return new HashMap<>();
}
}
public enum UrlType {
A(AHeaderProvider.getHeaderProvider()),
B(BHeaderProvider.getHeaderProvider());
private HeaderProvider headerProvider;
UrlType(HeaderProvider headerProvider) {
this.headerProvider = headerProvider;
}
public HeaderProvider getHeaderProvider() {
return headerProvider;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.