Java:如何确定抽象类型的具体类型?
我有办法Java:如何确定抽象类型的具体类型?,java,abstract-class,Java,Abstract Class,我有办法 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; } 公共静态设置do
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;
}
公共静态设置doSomething(设置oldSet){
//我不一定希望这是一个哈希集
Set newSet=newhashset();
//向新闻集中添加一些内容
返回新闻集;
}
是否有任何方法可以返回与传入集合相同的混凝土类型?(无需返回旧集)。不幸的是,无法克隆集合
示例
如果oldSet是树集,我还希望返回的集(newSet)是树集。是,使用反射:
Class<? extends Set<MyClass>> type = oldSet.getClass();
Constructor ctor = type.getConstructor();
Set<MyClass> newSet = ctor.newInstance();
Class是,使用反射:
Class<? extends Set<MyClass>> type = oldSet.getClass();
Constructor ctor = type.getConstructor();
Set<MyClass> newSet = ctor.newInstance();
Class您可以浏览集合,克隆集合中的每个对象并将其放入新集合。这是假设MyClass是可克隆的。您可以浏览集合,克隆集合中的每个对象并将其放入新集合。这是假设MyClass是可克隆的。试试看
Set<MyClass> doSomething(Set<MyClass> oldSet) {
Set<MyClass> newSet =oldSet.getClass().newInstance();
return newSet;
}
Set doSomething(Set oldSet){
Set newSet=oldSet.getClass().newInstance();
返回新闻集;
}
只有当oldSet的具体类有一个没有参数的构造函数时,这才有效。try
Set<MyClass> doSomething(Set<MyClass> oldSet) {
Set<MyClass> newSet =oldSet.getClass().newInstance();
return newSet;
}
Set doSomething(Set oldSet){
Set newSet=oldSet.getClass().newInstance();
返回新闻集;
}
只有当oldSet的具体类有一个没有参数的构造函数时,这才有效。你的问题不清楚,至少对我来说是这样。请改进我已经添加了一个例子-这更好吗?Alexei的答案是完美的,不管它值多少钱,这似乎是个坏主意。你的问题不清楚,至少对我来说是这样。请改进我已经添加了一个示例-这更好吗?Alexei的答案是完美的,不管它值多少钱,这似乎是个坏主意。所有集合都应该有这样一个构造函数,根据集合JavaDoc:>>>“所有通用集合实现类……都应该提供两个“标准”构造函数:一个void(无参数)构造函数,…和具有一个Collection类型参数的构造函数,该构造函数创建一个具有与其参数相同元素的新集合。“根据Collection
JavaDoc:>>“所有通用集合实现类…应提供两个”标准的“构造函数:一个void(无参数)构造函数,…和一个具有Collection类型的单个参数的构造函数,该构造函数创建一个新集合,其元素与其参数相同