2013-02-28 66 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

相關問題