Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用番石榴';s转发装饰器以创建特定集合_Java_Collections_Guava - Fatal编程技术网

Java 使用番石榴';s转发装饰器以创建特定集合

Java 使用番石榴';s转发装饰器以创建特定集合,java,collections,guava,Java,Collections,Guava,我有多个使用多个集合参数的方法 我想让事情变得更具体,所以我想使用转发装饰器 我想到的第一个问题是: 使用转发解码器是不是太过分了,我是不是错过了一个 更简单的是,我的意思是,这是非常简单的感谢番石榴 但还是 如果转发装饰器是正确的路径,那么 到目前为止似乎还不错,但有一件事我不确定,那就是如何取回基本集合(在本例中为ImmutableSet) 我是否只是创建了一个新方法(在接口和类中)来返回 “代表”?(如果是这样,什么是好的方法名称?) 还是还有别的 在下面的代码中,我将Immutabl

我有多个使用多个集合参数的方法

我想让事情变得更具体,所以我想使用转发装饰器

我想到的第一个问题是:

  • 使用转发解码器是不是太过分了,我是不是错过了一个 更简单的是,我的意思是,这是非常简单的感谢番石榴 但还是
如果转发装饰器是正确的路径,那么

到目前为止似乎还不错,但有一件事我不确定,那就是如何取回基本集合(在本例中为ImmutableSet)

  • 我是否只是创建了一个新方法(在接口和类中)来返回 “代表”?(如果是这样,什么是好的方法名称?)
  • 还是还有别的
  • 在下面的代码中,我将ImmutableSet保存为setA

    守则:

    接口:

    package com.ps.experiment.forwarding;
    
    import java.util.Collection;
    
    public interface ISetA extends Set<String>{}
    
    package com.ps.experiment.forwarding;
    导入java.util.Collection;
    公共接口ISetA扩展集{}
    
    类别:

    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);
            }
        }
    
    package com.ps.experiment.forwarding;
    导入com.google.common.collect.ForwardingSet;
    导入com.google.common.collect.ImmutableSet;
    公共类SetA扩展ForwardingSet实现ISetA
    {
    最终ImmutableSet委托;//支持列表
    @凌驾
    受保护的ImmutableSet委托()
    {
    返回此.delegate;
    }
    私有SetA(最终ImmutableSet字符串)
    {
    this.delegate=字符串;
    }
    公共静态ISetA(最终ImmutableSet字符串)
    {
    返回新SetA(字符串);
    }
    }
    
    您编写的代码是正确的。如果要访问后端集合,只需将
    delegate()
    设置为public
    而不是
    protected

    我有一个后续问题。假设我需要7个这样的特定接口和类,让我们假设所有ImmutableSet,除了复制代码和更改类和接口名称之外,还有更好的选择吗。这样做的原因是,所有7个东西都使用相同的集合类型,但我希望确保不接受错误的参数,从而使用7个不同的接口和类。