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