具有泛型的 Java 复制构造函数
这在以前可能已经被问过一百万次了,但是我在使用有界类型参数的抽象类上编写复制构造函数时遇到了麻烦。我有一些代码看起来像这样:
public abstract class Superclass<T> {
Set<? extends Variable<T>> vars;
public abstract Superclass<? extends T> copy();
class Variable<T> {
T value;
}
}
class Foo extends Superclass<Integer> {
public Foo copy() {
Foo _newFoo = Foo();
Set<FooVariable> _newVars = new HashSet<FooVariable>();
_newVars.addAll(this.vars);
_newFoo.vars = _newVars;
}
class FooVariable extends Variable<Integer> { /* ... */ }
}
class Bar extends Superclass<String> {
public Bar copy() {
Bar _newBar = Bar();
Set<BarVariable> _newVars = new HashSet<BarVariable>();
_newVars.addAll(this.vars);
_newBar.vars = _newVars;
}
class BarVariable extends Variable<String> { /* ... */ }
}
由于除了变量类型之外,两者的方法都是相同的,因此我希望能够将该代码移动到超类中的具体方法中。但是我无法弄清楚(a)如何让具体方法在a上调用时返回一个实例,如果在a上调用则返回一个实例,并且(b)根据需要用s或s填充集合。copy
Foo
Bar
public Superclass<? extends T> copy
Foo
Foo
Bar
Bar
vars
FooVariable
BarVariable
任何人都可以帮忙告诉我我错过了什么吗?谢谢。