使用Guava的Forwarding Decorators创建特定的集合

时间:2013-02-28 16:08:34

标签: java collections guava

我有多个使用多个Collection参数的方法。

我想让事情更具体,所以我想使用Forwarding Decorator

首先想到的问题是:

  • 使用Forwarding Decoartor是否过分,我错过了    一些更简单的东西,我的意思是,这要归功于番石榴    但还是吗?

如果Forwarding Decorator是正确的路径,那么

到目前为止似乎很好,但我不确定的一件事是如何获得基本集合(在这种情况下为ImmutableSet)?

  1. 我是否只是创建一个返回的新方法(在接口和类中) “代表”? (如果是,那么什么是一个好的方法名?)
  2. 还是还有什么?
  3. 在下面的代码中,我将ImmutableSet保存为setA。

    守则:

    接口:

    package com.ps.experiment.forwarding;
    
    import java.util.Collection;
    
    public interface ISetA extends Set<String>{}
    

    类别:

    package com.ps.experiment.forwarding;
    
    import com.google.common.collect.ForwardingSet;
    import com.google.common.collect.ImmutableSet;
    
        public class SetA extends ForwardingSet<String> implements ISetA
        {
            final ImmutableSet<String>  delegate;   // backing list
    
            @Override
            protected ImmutableSet<String> delegate()
            {
                return this.delegate;
            }
    
            private SetA(final ImmutableSet<String> strings)
            {
                this.delegate = strings;
            }
    
            public static ISetA of(final ImmutableSet<String> strings)
            {
                return new SetA(strings);
            }
        }
    

1 个答案:

答案 0 :(得分:1)

您编写的代码是正确的方法。如果您想访问后端收藏集,只需制作delegate() public而不是protected