簡體   English   中英

枚舉以返回接口的實現

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM