0

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

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

想到的第一个问题是:

  • 使用 Forwarding Decoartor 是不是有点过头了,我是不是错过了更简单的东西,我的意思是这很简单,多亏了 Guava,但仍然如此?

如果转发装饰器是正确的路径,那么

到目前为止看起来还不错,但我不确定的一件事是如何取回基本集合(在这种情况下为 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);
        }
    }
4

1 回答 1

1

您编写的代码是正确的方法。如果要访问后端集合,只需使用 makedelegate() public而不是protected.

于 2013-02-28T16:15:55.617 回答