この特定の質問に対する直接的な答えが見つからなかったので...クラスを想定します:
class MyClass {
private final Set<String> tags;
MyClass(Set<String> initialTags) {
this.tags = ???(initialtags);
}
}
セットの正確な実装を気にせず、最小限のオーバーヘッドでコピーが必要なだけなので、基本的には initialTags の内部状態の直接コピーが必要です。clone
Set はインターフェイスなので、使用できません。これは可能ですか、またはnew HashSet<String>(tags);
タイプについて決定する必要があるようなものを使用する必要がありますか?
前提: セット項目タイプは不変に制限されています。呼び出し元が壊れた Set 実装を渡さないinitialTags
ことを信頼できます。また、このクラスで内部的に使用するのに十分なパフォーマンスが得られることを信頼できます。
リフレクションとclone()を試してみようと思っているのですが、これはちょっと汚いような気がします...