2013-02-28 69 views
0

我有多个使用多个Collection参数的方法。使用Guava的转发装饰器创建特定的集合

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

想到的是第一个问题:

  • 它是一个矫枉过正使用转发Decoartor,我失去了一个 更简单的东西,我的意思是这很简单,多亏了番石榴 但仍然?

如果转发装饰才是正途然后

它似乎罚款,到目前为止,但有一两件事我不知道是如何找基地集合(ImmutableSet在这种情况下)回来吗?

  1. 我只是创建一个新的方法(在接口和类),返回 “委托”? (如果是的话,这将是一个很好的方法名称?)
  2. 还是有更多的东西?

在以下代码中,我将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

你写的代码是正确的方法。如果要访问后端集合,只需制作delegate()public而不是protected

+0

我有一个后续问题。假设我需要7个这样的特定的接口和类让我们假设所有的ImmutableSet,除了复制代码以及更改类和接口名称外,是否还有更好的选项。原因是所有7种东西都使用相同的集合类型,但我想确保一个错误的参数不被接受,因此7个不同的接口和类。 – 2013-02-28 16:25:22