這可能以前曾經有過一百萬次的問題,但我無法在包裝類型參數的抽象類上編寫一個複製構造函數。我有一些代碼,看起來像這樣:使用泛型的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> { /* ... */ }
}
由於兩個Foo
和Bar
的copy
方法是除了變量類型相同,我希望能夠在該代碼轉移到具體的方法超類。但我想不出(一)如何有具體的public Superclass<? extends T> copy
方法返回一個Foo
例如,如果叫上Foo
和Bar
例如,如果叫上Bar
和(b)填充vars
鑲有FooVariable
S或BarVariable
S作爲適當。
任何人都可以請幫忙告訴我我錯過了什麼嗎?謝謝。
複製構造函數是一個實際的構造函數,它接受該類的一個實例作爲參數。這更像是一種複製方法。 –
不會給這些'Foo _newFoo = Foo();'編譯錯誤,那麼缺少的返回類型呢?或者我完全誤讀了一些概念 – exexzian