我有一个方法
public static Set<MyClass> doSomething(Set<MyClass> oldSet) {
//I don't necessarily want this to be a HashSet
Set<MyClass> newSet = new HashSet<MyClass>();
//Add some things to newSet
return newSet;
}
有没有什么方法可以返回与Set中传递的相同的具体类型? (无需返回oldSet)。不幸的是,无法克隆集。
示例
如果oldSet是TreeSet,我还希望返回的set(newSet)是一个TreeSet。
答案 0 :(得分:5)
尝试
Set<MyClass> doSomething(Set<MyClass> oldSet) {
Set<MyClass> newSet =oldSet.getClass().newInstance();
return newSet;
}
仅当具体类的oldSet具有不带参数的构造函数时才有效。
答案 1 :(得分:1)
是的,使用反射:
Class<? extends Set<MyClass>> type = oldSet.getClass();
Constructor ctor = type.getConstructor();
Set<MyClass> newSet = ctor.newInstance();
(从我的头脑中,你将不得不添加几种类型和大量的异常处理程序。)
您也可以克隆集:
Class<? extends Set<MyClass>> type = oldSet.getClass();
Constructor ctor = type.getConstructor( Collection.class );
Set<MyClass> newSet = ctor.newInstance( oldSet );
答案 2 :(得分:0)
您可以遍历该集合,克隆集合中的每个对象并将其放入新集合中。假设MyClass是可克隆的。