0

複数の Collection パラメーターを使用する複数のメソッドがあります。

物事をより具体的にしたかったので、Forwarding Decorator を使用することを考えました

頭に浮かぶ最初の質問は次のとおりです。

  • Forwarding Decoartor を使用するのはやり過ぎですか? もっと単純なものが欠けていますか? Guava のおかげでこれは非常に単純ですが、それでも?

Forwarding Decorator が正しいパスである場合

これまでのところ問題ないようですが、よくわからないことの 1 つは、ベース コレクション (この場合は ImmutableSet) を取得する方法です。

  1. "delegate" を返す新しいメソッドを (インターフェイスとクラスで) 作成するだけですか? (もしそうなら、良いメソッド名は何でしょうか?)
  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

あなたが書いたコードは正しい方法です。delegate() publicバックエンド コレクションにアクセスする場合は、代わりに単に make を使用しprotectedます。

于 2013-02-28T16:15:55.617 に答える