class ExternalCacheBuilder<T extends ExternalCacheBuilder<T>> extends AbstractCacheBuilder<T> {

    @Override
    public ExternalCacheConfig getConfig() {<FILL_FUNCTION_BODY>}

    public boolean supportBroadcast() {
        return false;
    }

    public BroadcastManager createBroadcastManager(CacheManager cacheManager) {
        return null;
    }

    public T broadcastChannel(String broadcastChannel) {
        getConfig().setBroadcastChannel(broadcastChannel);
        return self();
    }

    public void setBroadcastChannel(String broadcastChannel) {
        getConfig().setBroadcastChannel(broadcastChannel);
    }

    public T keyPrefix(String keyPrefix) {
        getConfig().setKeyPrefixSupplier(() -> keyPrefix);
        return self();
    }

    public T keyPrefixSupplier(Supplier<String> keyPrefixSupplier) {
        getConfig().setKeyPrefixSupplier(keyPrefixSupplier);
        return self();
    }

    public T valueEncoder(Function<Object, byte[]> valueEncoder){
        getConfig().setValueEncoder(valueEncoder);
        return self();
    }

    public T valueDecoder(Function<byte[], Object> valueDecoder){
        getConfig().setValueDecoder(valueDecoder);
        return self();
    }

    public void setKeyPrefix(String keyPrefix){
        if (keyPrefix != null) {
            getConfig().setKeyPrefixSupplier(() -> keyPrefix);
        } else {
            getConfig().setKeyPrefixSupplier(null);
        }
    }

    public void setKeyPrefixSupplier(Supplier<String> keyPrefixSupplier){
        getConfig().setKeyPrefixSupplier(keyPrefixSupplier);
    }

    public void setValueEncoder(Function<Object, byte[]> valueEncoder){
        getConfig().setValueEncoder(valueEncoder);
    }

    public void setValueDecoder(Function<byte[], Object> valueDecoder){
        getConfig().setValueDecoder(valueDecoder);
    }
}

        if (config == null) {
            config = new ExternalCacheConfig();
        }
        return (ExternalCacheConfig) config;
    
<methods>public non-sealed void <init>() ,public T addMonitor(com.alicp.jetcache.CacheMonitor) ,public final Cache<K,V> build() ,public final Cache<K,V> buildCache() ,public T buildFunc(Function<CacheConfig#RAW,Cache#RAW>) ,public T cacheNullValue(boolean) ,public T cachePenetrateProtect(boolean) ,public java.lang.Object clone() ,public T expireAfterAccess(long, java.util.concurrent.TimeUnit) ,public T expireAfterWrite(long, java.util.concurrent.TimeUnit) ,public abstract CacheConfig#RAW getConfig() ,public T keyConvertor(Function<java.lang.Object,java.lang.Object>) ,public T loader(CacheLoader<K,V>) ,public T refreshPolicy(com.alicp.jetcache.RefreshPolicy) ,public void setCacheNullValue(boolean) ,public void setCachePenetrateProtect(boolean) ,public void setExpireAfterAccessInMillis(long) ,public void setExpireAfterWriteInMillis(long) ,public void setKeyConvertor(Function<java.lang.Object,java.lang.Object>) ,public void setLoader(CacheLoader<K,V>) ,public void setMonitors(List<com.alicp.jetcache.CacheMonitor>) ,public void setRefreshPolicy(com.alicp.jetcache.RefreshPolicy) <variables>private Function<CacheConfig#RAW,Cache#RAW> buildFunc,protected CacheConfig#RAW config