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