このメソッドを実装することは可能ですか?実数型を含むセットを複製する
public <T> Set<T> cloneSet(Set<T> original);
結果セットは原稿がTreeSetのであれば、その後、結果セットもTreeSetのある、元のセット(例えば同じ型でなければならない。
このメソッドを実装することは可能ですか?実数型を含むセットを複製する
public <T> Set<T> cloneSet(Set<T> original);
結果セットは原稿がTreeSetのであれば、その後、結果セットもTreeSetのある、元のセット(例えば同じ型でなければならない。
このためにリフレクションを使用することができ。この例を参照してください:
public class CloneTest {
public static <T> Set<T> clone(Set<T> set) {
try {
Set<T> cloned = set.getClass().newInstance();
cloned.addAll(set);
return cloned;
} catch (InstantiationException | IllegalAccessException e) {
e.printStackTrace();
return null;
}
}
public static void main(String[] args) {
Set<String> test = new TreeSet<>();
test.add("asd");
printClone(clone(test));
printClone(clone(new HashSet<>(test)));
}
public static void printClone(Set<?> set) {
System.out.println(set.getClass().getSimpleName());
set.forEach(System.out::println);
}
}
これが印刷されます:
TreeSet
asd
HashSet
asd
クラス情報を使用して新しいインスタンスを作成します。それがセットであることがわかっているとすれば、addAllを呼び出してすべての要素を追加することができます。要素は複製されないので、同じ参照です。
これは、セットにデフォルトコンストラクタがあるために機能します。私はあなたが空でないコンストラクタを持っていれば、newInstance
メソッドはおそらく失敗すると思います。
これは楽しい小さな例だったが、私は生産であることを使用することはありません:)
アルトゥル
今のところそれは最高のソリューションです、ありがとう:) – aurya
おそらく 'セットにclone'を呼びますか? – john16384
標準のJavaライブラリの実装に自分自身を限定すれば、それらはすべて 'clone'メソッドを持っていると思います。 –
@ john16384これは私が最初に考えたものですが、SetはCloneableではありません – aurya